[plt-scheme] List accessor predicates

From: Erich Rast (erich at snafu.de)
Date: Wed Jul 11 06:17:57 EDT 2007

Hi all,

Sorry for sending lengthy mails to the list, but I'd like to know  
whether the module attached below is correct. (It's auto-generated,  
of course.)

Best regards,

Erich

--------
(module list-accessor-predicates mzscheme

   (provide (all-defined))

   (define-syntax car? (syntax-rules () ((car? datum) (pair? datum))))

   (define-syntax cdr? (syntax-rules () ((cdr? datum) (pair? datum))))

   (define-syntax cadr? (syntax-rules () ((cadr? datum) (and (pair?  
datum) (pair? (cdr datum))))))

   (define-syntax cdar? (syntax-rules () ((cdar? datum) (and (pair?  
datum) (pair? (car datum))))))

   (define-syntax caar? (syntax-rules () ((caar? datum) (and (pair?  
datum) (pair? (car datum))))))

   (define-syntax cddr? (syntax-rules () ((cddr? datum) (and (pair?  
datum) (pair? (cdr datum))))))

   (define-syntax cdaar? (syntax-rules () ((cdaar? datum) (and (pair?  
datum) (pair? (car datum)) (pair? (caar datum))))))

   (define-syntax cadar? (syntax-rules () ((cadar? datum) (and (pair?  
datum) (pair? (car datum)) (pair? (cdar datum))))))

   (define-syntax caadr? (syntax-rules () ((caadr? datum) (and (pair?  
datum) (pair? (cdr datum)) (pair? (cadr datum))))))

   (define-syntax caddr? (syntax-rules () ((caddr? datum) (and (pair?  
datum) (pair? (cdr datum)) (pair? (cddr datum))))))

   (define-syntax cdadr? (syntax-rules () ((cdadr? datum) (and (pair?  
datum) (pair? (cdr datum)) (pair? (cadr datum))))))

   (define-syntax cddar? (syntax-rules () ((cddar? datum) (and (pair?  
datum) (pair? (car datum)) (pair? (cdar datum))))))

   (define-syntax caaddr? (syntax-rules () ((caaddr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cddr datum)) (pair? (caddr  
datum))))))

   (define-syntax cadadr? (syntax-rules () ((cadadr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cadr datum)) (pair? (cdadr  
datum))))))

   (define-syntax caddar? (syntax-rules () ((caddar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (cdar datum)) (pair? (cddar  
datum))))))

   (define-syntax cdaadr? (syntax-rules () ((cdaadr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cadr datum)) (pair? (caadr  
datum))))))

   (define-syntax cdadar? (syntax-rules () ((cdadar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (cdar datum)) (pair? (cadar  
datum))))))

   (define-syntax cddaar? (syntax-rules () ((cddaar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (caar datum)) (pair? (cdaar  
datum))))))

   (define-syntax cadddr? (syntax-rules () ((cadddr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cddr datum)) (pair? (cdddr  
datum))))))

   (define-syntax cdaddr? (syntax-rules () ((cdaddr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cddr datum)) (pair? (caddr  
datum))))))

   (define-syntax cddadr? (syntax-rules () ((cddadr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cadr datum)) (pair? (cdadr  
datum))))))

   (define-syntax cdddar? (syntax-rules () ((cdddar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (cdar datum)) (pair? (cddar  
datum))))))

   (define-syntax cddddr? (syntax-rules () ((cddddr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cddr datum)) (pair? (cdddr  
datum))))))

   (define-syntax caaadr? (syntax-rules () ((caaadr? datum) (and  
(pair? datum) (pair? (cdr datum)) (pair? (cadr datum)) (pair? (caadr  
datum))))))

   (define-syntax caadar? (syntax-rules () ((caadar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (cdar datum)) (pair? (cadar  
datum))))))

   (define-syntax cadaar? (syntax-rules () ((cadaar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (caar datum)) (pair? (cdaar  
datum))))))

   (define-syntax cdaaar? (syntax-rules () ((cdaaar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (caar datum)) (pair? (caaar  
datum))))))

   (define-syntax caaaar? (syntax-rules () ((caaaar? datum) (and  
(pair? datum) (pair? (car datum)) (pair? (caar datum)) (pair? (caaar  
datum))))))

   )


Posted on the users mailing list.