Tシャツ欲しい
久しぶりの更新がこれってどうなんだろう。でもTシャツ欲しい。
Lisp処理系っぽいのを書き始めてみた:2
今回は、
(+ 1 (* 2 3) 4)
のようなコードを実行できるような実装をしました。
Whileで数値を取って来て、)になったら取ってくるのを辞めるというシンプルな方法です。 これの問題点は、入れ子構造を解釈してくれないため、途中に)があるとそこで中断してしまいます。 そこで、()構造の入れ子の深さを表す変数を用意して、(を通ると+1,)を通ると-1して、その数で判定するようにしました。これで入れ子も使えるようになっています。
まだ構文木の出番ではない。
次は、defineを作って、関数を定義出来るようにしてみようかと思います。構文木と名前テーブルが必要になる?
その前に変数?面倒なので変数も関数もdefineで使えるようにしたいですね。
制作物は、https://github.com/nikuuchi/MyLisp で公開しています。
Lisp処理系っぽいのを書き始めてみた
まだ整数の二項ごとの四則演算しかできないけど、Lispっぽいのを作ってみた。
以下のようなS式を正しく計算してくれるはず。
(/ (* (+ 12 2) (- 0 1)) (+ 5 2))
ちなみにC++で書いております。ソースはgithubで管理。
https://github.com/nikuuchi/MyLisp
とりあえずファイルを読み込んで、再帰的下向きにパースして直に実行しています。
構文木とかも実装してません。
ここまでで作るので約1時間半。次回はリファクタリングと多項演算ですかね。あと複数行にまたがった数式の処理。
PHPでクロージャ書いてみる
PHP5.3以降なら使えるという無名関数を試すために、よくあるクロージャによるカウント関数を作ってみた。 無名関数の定義にuseつけて参照渡しすると実現できるっぽい。
Arduino始めました
実はArduino Unoを前に買って放置しているので、噂のフィジカルコンピューティングとかをやってみたいと思う。