lat? 実装にチャレンジ

P15 lat?を書いてみてくださいという問題。
とりあえず先のページを見ないでどれだけかけるか挑戦してみました

(define atom?
  (lambda (x) 
    (and (not (pair? x)) (not (null? x)))))

(define (lat? n)
  (cond ((atom? n) true)
        ((null? n) true)
        (else (and (atom? (car n))
                   (lat? (cdr n))))))

(lat? (cons 1 (cons 3 4)))
; #t

ん?なんかうまくいかない。

(lat? (cdr n)) がうまく言ってないのかと思って
こんな感じでテストしてみました。

(atom? (cdr (cons 1 (cons 3 4))))
; #f


答えを見るもあんまり間違っていないよう。
ん、もしかしてconsがいけない。。。

(lat? '(1 (3 4)))
; #f

やった!
てことは

(cdr (cons 1 (cons 3 4)))
(cdr  '(1 (3 4)))

;(3 . 4)
;((3 4))

なんだ、全然想像してた値と違うや
consの使い方を理解できてなかったってことでした。


追記;
 and はまだ使っちゃいけなかったのね orz