ソースはこちら。
https://github.com/takeisa/LispInCommonLisp
350行程度になった。
letはまだ実装していない。
言語処理系を実装するのは楽しいなー。
動作例
※evalで評価する式をデバッグ出力している。
フィボナッチ数を求める関数を定義する。
CL-USER> (repl)
LISP> (define (fibonacci n)
(if (<= n 1)
n
(+ (fibonacci (- n 2)) (fibonacci (- n 1)))))
make-lamba parameters: (N)
make-lamba body: ((IF (<= N 1)
N
(+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))))
lambda: (LAMBDA
((N) (IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))))
lambda parameters: (N)
lambda body: ((IF (<= N 1)
N
(+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))))
OK
20番目のフィボナッチ数を求める。
LISP> (fibonacci 10)
t-eval: (FIBONACCI 10)
t-eval: FIBONACCI
t-eval: 10
t-eval: (IF (<= N 1)
N
(+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))
t-eval: (<= N 1)
t-eval: <=
t-eval: N
t-eval: 1
..snip..
6765
0 件のコメント:
コメントを投稿