2009-09-01から1ヶ月間の記事一覧

ifのセマンティクスをarc風にする試み

anaphoric ifを使っていて時々感じるんですが、やはり空リストが偽として扱われない Scheme の意味論は、実用上どうしても不便なことが多いです。例えば、cdr が空でなければループを続ける (if (pair? (cdr l)) (loop (cdr l)) ...)というパターンを (aif (…

Threaded OR (in PLT Scheme)

ある必要があって、複数のリソースから最初に返答の得られたものを値として採用する、という構文を作ってみました。実装: (define-syntax spawn (syntax-rules () ((spawn . e) (thread (lambda () . e))))) ;; cf: http://scheme.com/tspl4/examples.html#.…

flet & labels in Scheme

ループ処理を書く時などに、全く同じ関数呼び出しを複数回書くことがあると思うんですが、それがどうも面倒*1なので、ローカル関数を手軽に作る構文を書いてみました。マクロ: (require "mlfun.ss") (define-syntax define-flet (syntax-rules () ((define-f…