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でのエラー処理か、末尾再起の最適化だ!