mapが動かない。

SICPのcons、car、cdrの再定義は動作した。

(gdb) run
Starting program: /home/troter/work/jmc-lisp/jmcl
> (set! cons (lambda (x y) (lambda (m) (cond ((eq? 'car m) x) (t y)))))
(set! cons (lambda (x y) (lambda (m) (cond ((eq? (quote car) m) x) (t y)))))
#<closure>(x y)((lambda (m) (cond ((eq? (quote car) m) x) (t y))))
> (set! car (lambda (z) (z 'car)))
(set! car (lambda (z) (z (quote car))))
#<closure>(z)((z (quote car)))
> (set! cdr (lambda (z) (z 'cdr)))
(set! cdr (lambda (z) (z (quote cdr))))
#<closure>(z)((z (quote cdr)))
> (car (cons 'a 'd))
(car (cons (quote a) (quote d)))
a
> (cdr (cons 'a 'd))
(cdr (cons (quote a) (quote d)))
d
>

電車の中で作ったnreverseが間違ってて焦った。負数を読み込む部分も間違っていて、一文字であれば何でもシンボルになってた(汗

今はこれが動かない。

> (map (lambda (x) (+ x 1)) ((lambda x x) 1 2 3 4 5))
(map (lambda (x) (+ x 1)) ((lambda x x) 1 2 3 4 5))

Program received signal SIGSEGV, Segmentation fault.
eval (sexp=0x1) at eval.c:317
(gdb)

lambdaは動いているから、バグってるのはmap。

> ((lambda x x) 1 2 3 4 5)
((lambda x x) 1 2 3 4 5)
(1 2 3 4 5)
>