一昨日ブログに書いたPicricというScheme処理系について、プログラミングしたときの方針とか、そのへんをまとめてみます。 Scheme(Lisp)の処理系は実装が簡単簡単と言われる割にその実装方法についてまとめられたサイトがほとんどなくて、僕自身調べるのにかなり苦労しました。もうこれ以上僕みたいな犠牲者を出したくありません。 とはいえいろいろ間違ってる箇所もあるかと思いますので気づいた方はコメントをおねがいします。 まずPicricについて。 実は昔々(今年春)NLispというものを作った。 Pythonで実装されたSchemeのサブセット。 継続が実装されていなかった。 今度こそは継続を!pythonからも脱脚して一人前になりたい! そんな動機で開発を始める。 名前の由来はピクリン酸。 ピクリン酸はそのやたら可愛い名前にも関わらず実はものすごい爆薬。 そういう「意外とすごい」インタ
https://github.com/wasabiz/Picric 昨日ツイッターでマクロについていろんな人に教えて頂いて心の中のもやもやがすっきりしたのでCPS変換してみました。 ・見ればわかりますが実装はCでやってます。全部Cです。 ・可読性重視で組んだので効率悪いところがちらほらあります。 ・でもその分読みやすいと思います。 ・Schemeのサブセットのつもりで組んでましたが気づいたらif文がTとNILで条件づけるようになってました。僕のせいじゃありません。 ・処理の流れとしてはパース->マクロ展開->正規化->CPS変換->最適化(ベータ簡約)->evalです ・とはいいつつマクロとノーマライゼーションと最適化は未実装です。 ・でもCPS変換器が受け付けるのは正規化済みのコードだけです。 ・なので実行するまえに人間の手で正規化してあげてください。 ・e.x., (define (d
いやぁClojure楽しいですなぁ 楽しいことはいいことです Lispでここまでテンションあがったの始めてかもしれない ということで四則ソルバー clojureを堪能しながらつくったらO(10^11)になりました。(数字6個) ここからはキレイに楽しくじゃなく貪欲にアルゴリズム的に削っていきます。 メモ化しまくれば実用的にはなるはず。 ツイートする
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く