そのうち読む
絶対。
04032010 lisp
これは欲しいのう
年末か年始に日本語版がでるそうなのでそれまでには一通り読んでおきたい。
Perl/Python/Rubyプログラマは特に6章のConcurrencyのところ7章のマクロを読むと良いですぞとprefaceに書いてあった。
090923現在2775円って洋書にしてはかなり安い値段な気がする。
後者は構文糖衣?
# let f = fun x -> x * x
val f : int -> int = <fun>
# let g x = x * x;;
val g : int -> int = <fun>
ここまでやれる
# ( * ) 4 4;;
Common Lispだとこうかな
(setq f (lambda (x) (* x x)))
(funcall f 4)
(defun g (x) (* x x))
(g 4)
予約したまま5ヶ月近くたち、忘れかけてたProgramming Clojureが発送された。
やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。
sub fun {
my ($self, $arguments) = @_;
my $arg1 = $self->eval->eval($arguments->cdr)->car;
my $sym = $arguments->car;
$sym->value($arg1);
$self->env->put($sym,$sym->name);
return $arg1;
}
束縛するものがリストだと、まだうまくいかない。
Moosp> (setq a 5)
5
Moosp> (setq b 2)
2
Moosp> (+ a b)
7
Moosp> (setq c (+ 1 2))
Attribute (value) does not pass the type constraint because: Validation
failed for 'Moosp::Sexp' failed with value Moosp::List=HASH(0xa2a110) at lib/Moosp/Function/Setq.pm line 22
Moosp::Function::Setq::fun('Moosp::Function::Setq=HASH(0xa208a0)',
'Moosp::List=HASH(0xa29a80)') called at lib/Moosp/Eval.pm line 93
Moosp::Eval::eval('Moosp::Eval=HASH(0xa1dcc0)',
'Moosp::List=HASH(0xa29fa0)') called at lib/Moosp.pm line 67
Moosp::run('Moosp=HASH(0x804320)') called at moosp.pl line 7
やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。
REPLまで出来て
(+ 1 2)
は動くのに
(+ (+ 1 2) 3)
が動かなくて、evalの再帰が悪いのかと思ったら、Functionのほうだった。
sub fun {
my ($self, $arguments) = @_;
my $arg1;
my $ret = Moosp::Integer->new(value => 0);
return $ret if ($arguments->isa('Moosp::Nil'));
while (1) {
$arg1 = $self->eval->eval($arguments->car);
$ret = $ret->add($arg1);
last if ($arguments->cdr->isa('Moosp::Nil'));
$arguments = $arguments->cdr;
}
return $ret;
}
carがfunctionの場合はcdr部は全て評価済みにしておかないといけないんだった。
やっとうまく動いた
Moosp> (+ (+ 1 2) (+ 3 4))
10
tak実行が見えてきた。
やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(14日目のあたり)
REPLまでやって対話環境にしてみたら、エラーが出まくる。readerよりはevaluatorまわりの気がしないでもない。なんか細かいとこから見直さないといけなさそうなのでTest::Pod::Coverageとかちゃんと通るようにという気晴らしを。
明日から、帰省するので向こうでちまちまデバッグをする予定。ゴールデンウィーク中には最後(takの実行)までは行きたい。
やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(13日目のあたり)
REPLのE、つまり評価器をつくる。これが終われば統合して処理系を完成させるのみ。
しかし10日目のCARがevalしたあとのcarを返すようになっているのだけど、evalはlistを戻さんよ?最後の処理系の完成のところで色々バグが見つかる予感(大)
やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(12日目のあたり)
()がNilになるようにReaderをいじる。makeListメソッドをちょっと変えればいいだけ。