勾配の緩やかな初心者向け Scheme 入門ページです。 コンピュータは使ったことがあるが、プログラミング経験があまりない人を想定しています。 Scheme の解説はすでに山ほど優れたものがありますが、あえて解説記事を書いてみました。 Scheme のような抽象的な話題は波長が合えばすんなりと理解できますが、あわないと全く理解できません。 他の解説を読んで今ひとつよく理解できなかった人は試しに読んでみてください。 この記事の目標はコンピュータ科学の教科書の決定版である SICP を読める程度の Scheme の知識を提供することです。 目次: 処理系のインストール Scheme を電卓代わりに使う リストを作ろう 関数を定義しよう 分岐 局所変数 繰り返し 高階関数 入出力 代入 文字、文字列 シンボル型 連想リスト、ハッシュ表 ベクトルと構造体 構文の定義 (マクロ) 継続 遅延評価 非
(2006年11月21日に開催した Lisp セミナー 後の懇親会に出席して) 先日のセミナーのあと、懇親会で何人かの方に 「Scheme についてどう思うか?」を聞かれました。 わたしは何を隠そう、初めて Scheme を知ったとき最終兵器を手に入れたような気分になった者の1人です。 もうこれで他のプログラミング言語を学ぶ必要はない、とまで思ったものです。 幸い、それが大間違いだったことにほどなく気がつき、 いまでは Scheme には ALGOL としての期待しか持っていません。 端的に言ってしまえば Scheme は Lisp ではないです。 この2つを混同するのは味噌糞いっしょ、ってやつで、つつしむべきです。 Confusing Common Lisp and Scheme is permissible once in a human life. -- Erik Naggumなぜか
以下メモ. やりたいこと.C 文字列 (ヌル終端) を Scheme コード片として評価し,結果を C 文字列の形で受け取る. C 文字列 (とりあえず,コマンドライン引数として与えている) を評価して,結果を標準出力に書き出すまではできた. $ gauche-config -I -I'/usr/lib/gauche/0.8.7/include' $ gauche-config -L -L'/usr/lib/gauche/0.8.7/i486-pc-linux-gnu' $ gauche-config -l -lgauche -ldl -lcrypt -lutil -lm -lpthread $ tcc -I/usr/lib/gauche/0.8.7/include /dev/stdin -L/usr/lib/gauche/0.8.7/i486-pc-linux-gnu -lgauche
昨日のエントリに Rui さんからコメントを頂きました。ありがとうございます。 私もなんだか同じイメージを持ってます。静的スコープでオブジェクトの寿命が永遠(無限エクステント)というのがまず初めにあって、その結果クロージャがあるという印象。 私が漠然と感じているクロージャへの解釈を、一言で表現されている様に思いました。 ここで無限エクステントに触れられていますが、実は私も、先のエントリを書いたとき、クロージャを副次的に作り出している仕様の一つとして、無限 (実装上は有限になるのでしょうが) エクステントを挙げようとは思ったのです。 しかし、レキシカルスコープとブロックの階層化 (手続きをトップレベル以外でも定義可能とか、lambda はどこでも書けるとか) を挙げることで、必然的に無限エクステントが求められることになると考えて、そちらを優先したのでした。 そして、その考えが、 例えば、レキ
クロージャについて色々と考えてみました。 以前にも書いたのですが、そもそも Gauche をインストールした目的の一つに、クロージャの動作をもっと理解したいという目的があったので。 で、色々と shiro さんが公開されているドキュメントを読み返したり、Gauche 上で試行錯誤しながら、これまでの私の解釈には誤りがあったと思う様になりました。 これまでの私の理解では、クロージャとは、 クロージャは、ファーストクラスのオブジェクトである。なので、名前も付けられるし、関数の引数や戻り値としても利用できる。 クロージャには、(そのクロージャ生成時の) 環境が閉じ込められている。 クロージャ実行時に参照される環境は、実行時点のものではなく、クロージャ自身に閉じ込めてある環境になる。 というものでした。 これらの認識自体には誤りはないと思っている (誤りがあったらツッコミをお願いしたいです。> 識
On Lisp Paul Graham の著書でマクロのことが満載の本。ただし Lisp で書いてある。 文中気になったコードをSchemeで書いてみるコーナー。 (セクションタイトルその他の邦訳は 野田さんの邦訳 をそのまま引用させてもらいます) マクロのツボ マクロはどのように、そしてなぜ違うのかを知ることは、マクロを正しく使うための鍵だ。 関数は結果を生むが、マクロは式を生む。----そしてこの式が評価されると結果を生む。 (「7 マクロ」から) マクロの引数は式であって値ではないことを忘れてはならない。 (「10.1 評価の回数」から) On Lispマクロのツボ5.1 Common Lisp は進化する5.3 関数の値のメモワイズ5.4 関数を合成する5.5 Cdr 部での再帰5.6 部分ツリーでの再帰7.1 マクロはどのように動作するか7.3 単純なマクロの定義7.5 引数リス
たらいまわし関数Haskell (hugs December 2001版)Ruby (1.8.0-preview2)Gauche (0.6.8)クロージャ版delay/force版クロージャでは何故計算量が減らないか議論 たらいまわし関数 tarai(x, y, z) := y if x <= y tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)) otherwise eagerに評価すると、不要な枝の先の先まで計算してしまって大いなる無駄となる。 lazy evaluationの利点が光る一品である。 参考: 竹内郁雄 どう転んでもLisp WikipediaJa:竹内関数(WikipediaEn:Tak (function)) たらいまわし関数 たらいまわしべんち Haskell vs Ruby たらいまわしべんち最終
Gauche の拡張ライブラリで、自分でクラスを定義する方法、というよりメモとしてのテンプレート。正しい手順か不明だけど、とりあえず動く。 安直だけど、"clos" という名前の拡張ライブラリを書くとして、Scheme で書くと次のような定義になるようにする。 (define-class <person> () ((name :init-value "Anonymous") (age :init-value 20)))拡張ライブラリのヘッダファイル clos.h の宣言。 typedef struct ScmPersonRec { SCM_HEADER; ScmObj name; int age; } ScmPerson; SCM_CLASS_DECL(Scm_PersonClass); #define SCM_CLASS_PERSON (&Scm_PersonClass) #define
A practical introduction to the programming language Scheme
_ [rubycocoa] Intel Mac で RubyCocoa Intel Mac で RubyCocoa を使って開発してる日本人の方のブログ「何気なくIntel iMacを買ってしまったWindowsユーザの奮闘記 」を見つけました。RubyCocoa開発メンバー全員 Intel Mac を持っていない(=動作確認できない)ので、大変貴重な情報でありがたいです。 _ [scheme][java] JavaベースのScheme処理系 オレンジニュースやtextfile.orgで、SISCというJavaベースのScheme処理系が紹介されていますが、The Kawa language framework というものもあります。 Javaベースの社内システムを開発しているScheme好きの友人(私にScheme、LispやSICPの存在を印象づけた人です)がいるのですが、本人が実装を
この言語は、MITの二人の聰明な人間がしていた大きな論争にはじまります。 それは、私がMITに学生として来るちょっと前のことでした。 この論争というのは、Carl Hewittと、 新しく学生として入ったGerry Sussmanの間に起こったものです。 Guy L. Steele Jr.「Scheme 過去・現在・未来 前編」 (bit vol.28,No.4 1996 4月号) あれは玉突きだね。.....いや、というよりはキャッチボールだ 北村薫「六の宮の姫君」 Actorに基づく言語 メッセージ送信 アクターにメッセージを送る。 メッセージを受け取ったアクターは、別のアクターにメッセージを送る。 以下同様。 例えば「1と2と3からなるメッセージをアクターaに送る」という事を [a 1 2 3] と書く事にする。 アクターaはメッセージを受け取ると、別のアクターにメッセージを送る。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く