2004-07-05-Mon Scheme: syntax-rules syntax-rulesの能力がどの程度か考えてみると、 シンボルやリストのパターンマッチングが可能で 末尾再帰の形で繰り返しマクロを適用すれば 色々なリスト変換が行なえるわけだから、 どんな計算可能な関数(つまりあらゆる再帰関数)でも syntax-rulesで実現できるだろう。 例えば、0を()、 1を(#t)、2を(#t #t)、3を(#t #t #t)というように 数をリストを使って表現した時、 どんな再帰関数もsyntax-rulesで書ける (再帰関数の答えになるリストに変換するマクロが書ける) だろうと予想できる。 まず足し算は次のように書ける。 (define-syntax s-add (syntax-rules () ((_ () ys) 'ys) ((_ (x . xs) ys) (s-add x
2004-06-07-Mon 雑記: 判らない事が判らないままで、判らない事が どんどん増えていく一方のような気がする。 Scheme: syntax-rules R5RSをのsyntax-rulesの挙動がよく判らない。 伝統的なマクロの場合、マクロを定義するプログラムというのは リスト操作を行なう普通のLisp、Schemeプログラムに過ぎない。 一方、syntax-rulesの場合、 Schemeとは異なるパターンマッチング言語で書かなければならない。 パターンマッチングを使えばリスト操作をマクロで書く事はできる。 例えばbeginとは逆に後ろの式から順に実行するrbeginというマクロを考える。 この場合、 (rbegin en ・・・ e1 e0) という式を (begin e0 e1 ・・・ en) という式に変換してやるだけだから、伝統的なマクロなら (define-mac
Setting up Emacs for PLT Scheme Saturday, January 17, 2004 I've created a page called " Setting up Emacs for use with PLT Scheme on Windows or Mac OS X". It's a step-by-step set of instructions on how to download, install and configure Emacs, PLT Scheme and some utilities that make developing with PLT Scheme easier. It is similar to the page that I created for the CL Cookbook on setting
(追記:Yコンビネータって何に使うの?) Yコンビネータ(Curryの不動点演算子)を説明するのがプチブーム(死語)らしいので、ふたたび挑戦。 まず、ふつーに再帰関数factをSchemeで定義してみる。 (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1))))))この定義は、右辺にfact自身が出現するので、再帰的定義なのであった。ここから右辺にfactが出現しないようにするのが目標。とりあえず、factを関数の引数として外から受け取るようにしてみる。 (define make-fact (lambda (my-fact) (lambda (n) (if (= n 0) 1 (* n (my-fact (- n 1)))))))これは( (make-fact fact) 10)みたく使えるが、make-factを呼び出す際に
Last update 1999/08/07 Scheme処理系の制作 第3回 (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 継続とは 今回は、前回「めんどくせえ」と放棄した継続の概念の説明および実装レポートについて書きたいと思います。 あれからまたインターネット漁ってみたのですが、やっぱりどうも日本語リソースはないらしいので、自力で書いてみることにします(schemeの研究してる学者・学生なんて掃いて捨てるほどいるだろうに……) さて、こんなC言語のコードがあるとします。 void foo(void){ bar(baz( )); bar(0); } C言語を学んだ皆さんなら、このコードがどういう順番に実行されるのかわかりますよね。説明されるまでもなく、 baz( )を呼び出す その戻り値を引数としてbarを呼び出す 0を引数として呼び出す fooの呼び出しもとに帰
Scheme Is Love 翻訳 原文:Scheme Is Love 著者:Don Box (Microsoft Corporation) ここ数年、Perl、PHP、Python、またはRubyなどの動的言語を採用することが流行しています。私がRubyと短かくも楽しいひと時を持ったことは認めましょう。しかし、Schemeと呼ばれているLisp方言に、私は真実の恋を見つけたと信じているのです。 Schemeでプログラムを書き、私はコーディング、デザイン、アーキテクチャ、および美意識に関して多くを学びました。このことは、Eric S.Raymondの「ハッカーになろう」に、より正確に書かれています。 また異なる理由、つまり最終的に習得した時に得られる深遠な悟りの経験のためにLispを学ぶ価値があるのです。この経験は、その後の人生で、あなたをより良いプログラマーにするはずです。たとえ、実際に
Apache/2.4.52 (Ubuntu) Server at www.cmt.phys.kyushu-u.ac.jp Port 80
emeitchさんのリクエストより。元ネタは Perlプログラマのレベル10。 私家版、Schemeプログラマのレベル10 くれぐれも本気にしないように。 レベル0 SchemeとかLispとかいうカッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。 EmacsLisp?もその親戚らしいけどコードを見ただけでくらくらする。 でも便利なマクロは自分の.emacsにコピペしている。 レベル1 Schemeに関するwebサイトを見たり、大学の講義での説明とかを聞いて、 factorialとかappendとかreverseとかを書いたり、 ネストした木構造のノードの数を数えたりできる。 でもそれが何の役に立つかわからない。こんな言語で実用的な プログラムが書けるなんて信じられない。 カッコの位置を間違えて動かないプロ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く