ウォンツテック

そでやまのーと

2010-01-01から1年間の記事一覧

LET OVER LAMBDA Reading

昨日の続きでバッククォートでネストされているマクロを追ってみる。 macroexpand-1がマクロを1回分だけ展開する関数なのでこれを使ってみてみよう。 (macroexpand-1 '(defmacro! square (o!x) `(* ,g!x ,g!x))) このようにmacroexpand-1に展開させたいマク…

LET OVER LAMBDA Reading

マクロを定義するマクロを定義するには,しばしば入れ子になった逆クォートが必要になる.逆クォートの入れ子は理解し辛いことで悪評が高い.よく使われる形にはいつか慣れるだろうが,逆クォートの付いた任意の式を見て,どのように展開されるかを言えるよ…

On Lisp

Paul GrahamのOn Lispの訳ってネットで公開されてたんだね。 知らなかったよ。http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/ 最近買ったDoug HoyteのLET OVER LAMBDAによく引用が出てきていたから、ちょっと読んでみようかな。

複数call/ccに対応

GitHub - sodeyama/slisp: lisp interpreter sLispの以下の点を改善しました。 コメントを可能にしました call/ccで生成するラムダ式で使う変数名をgensymで作るようにしました(変数名の衝突を防ぐ目的) call/ccを複数書けるようにしました。(ただし、トッ…

Software Design

そういえば、Software Design 2010年5月号で記事書きました。 Software Design 2010年5月号|技術評論社 * Emacsのトラノマキ 【13】俺流Lispインタプリタ……アリエルです。どこがemacsの記事なんだ、という突っ込みがあるかもしれませんが emacsって結局elis…

ぱーふぇくとYコンビネータ

slisp/slisp-ycc.el at master · sodeyama/slisp · GitHubsLispのベータ変換にバグがあり (defun Y (f) ((lambda (x) (f (x x))) (lambda (x) (f (x x))))) (print ((Y (lambda (f) (lambda (n) (if (= n 0) 1 (* n (f (- n 1))))))) 8)) みたいなコードをsL…

sLispで継続

Lisp処理系で継続も(ry ってことでsLispで継続を実装しました。 S式パースするのとcatch throw使う方法で書いたらなんかあっさり書けた。ま、厳密に仕様みながら実装したわけではないので色々動作はおかしいと思う あとcall/ccは1個しか書けません call/cc使…

sLispでYコンビネータ

「Yコンビネータも出来ないLisp処理系って処理系として終わってるよね。キモッ!」 と女子大生に言われないように、sLispでYコンビネータを出来るようにしました。 前回アップした似非Lisp処理系からかなり書き換えてます。 とりあえずdefunって結局lambdaだ…

sLisp

今度書く記事のためにelispでLISPインタープリタ「sLisp」を書きました。 http://github.com/sodeyama/slisp/blob/master/slisp.ellisp言語で書いてはいますが、読み込んだ文字列をそのままread関数でS式をパースするような事はせず、 その他の言語で行うの…

すげー

OCamlでカーネル書いてる。しかもカーネルが使うメモリ領域はGCで管理されている http://ol-www.cs.uec.ac.jp/~oyama/publications/InoueSIGOS10.pdf

仕事でorg-modeで書いたテキストをhtmlに変換する必要があったんだけど、 結構な量があったんで自動化したいなーと思って調べてたらやっぱあったlisp/textmodes/org.el (emacs-22.2の場合) (defun org-export-as-html-batch () "Call `org-export-as-html', …

rubikitchさんとこのブログを読んでwindowの切り替えをデフォルトのC-x oからC-tに変更 すごい楽。 http://d.hatena.ne.jp/rubikitch/20100210/emacs (defun other-window-or-split () (interactive) (when (one-window-p) (split-window-horizontally)) (ot…

ちょっとインタフェースを変えてベータ変換数を入力しなくてもいいようにした。 ついでにgithubにリポジトリ作って突っ込んでおく。 あと、elispでemacsの簡単なメジャーモードを作成 lambda.lmとか適当なファイルでラムダ式書いておいてbeta-modeにしてから…

ラムダ計算論の本読んでたので勢い余って関数型言語ocamlでラムダ計算機を書きました。 これでチャーチ数定義して計算すれば、ノイマン型の命令型計算機で計算している人を見かけた時に 「ぷっダサwww」と言えます。 一応このラムダ計算機の使い方 ラムダ式…

計算論のP.66のβ変換における等号表現である を定義する時に現れる表現 の定義なんだけど、直感的に と思ってたけど なんだね 不動点演算子Yの定義で、Mの不動点演算子Yに対して YM -> M'(M' ≡ M''M'', M'' ≡ λx. M(xx) ) からいきなり YM = M'を導いてたか…

久しぶりに高橋正子の計算論の第2章「λ計算の基礎」最初の方の数ページを読んだ。 λ計算ってとどのつまり何よ? って事なんだけど、少し分かった λ"計算"ってのは、まず以下の定義に基づき再帰的に定義される"λ式" 1. 変数 x0, x1, x2, ...はλ式である 2. M…

Nokogiriのparse時の文字コード

rubyのHTML, XMLパーサであるNokogiriでsjis等の日本語を含んだファイルをパースする時の文字コードはutf8が良さげ。 というよりsjisとかうまくparseしてくれない。 ※全くparseしてくれないんじゃなくて、途中でdomの一部が欠落している場合があった 環境 ru…