map動いた

リストのtransposed(zip)を書いて少し修正したら動いた。

Starting program: /home/troter/work/jmc-lisp/jmcl
> (map (lambda (a b) (* a b)) '(1 2 3 4 5) '(1 2 3 4 5))
(map (lambda (a b) (* a b)) (quote (1 2 3 4 5)) (quote (1 2 3 4 5)))
(1 4 9 16 25)
> (map (lambda (a b) (* a b)) '(1 2 3 4 5) '(1 2 3))
(map (lambda (a b) (* a b)) (quote (1 2 3 4 5)) (quote (1 2 3)))
(1 4 9)
>

最初はひとつのsubrとひとつのリストを取る方法で実装しようとしてたのに、applyに渡すときに第二引数がリストになっていなかったり(funcallのような渡し方)してた。そりゃ駄目だよ。。。リストを扱う組み込み関数を定義するときは先にcでユーティリティを書いておくと楽だなぁ。car、cdrだけしかないと、ちょっと大変。cで書いておけばそのまま組み込み関数にもできる場合があるし。

次の目標はsetjmp、longjmpでのエラー処理か、末尾再起の最適化だ!