Racket入門:Lispの精神を受け継ぐ言語で、独自の構文を作るまで
A Friendly Introduction to Racket

1958年に誕生したLispは、ガベージコレクションやファーストクラス関数など、現代プログラミングの基盤となる多くの概念を生み出しました。その系譜を引き継ぐRacketは、教育と研究を目的に設計された言語であり、今では「言語を作るための言語」として進化しています。本記事では、Racketのインストールから始め、関数定義、リスト操作、高階関数、再帰、そしてマクロによる言語拡張までを、実際のコード例とともに解説します。コードがデータとして扱われる「ホモイコニシティ」の概念を理解すれば、あなたも独自の構文を作り出せるようになるでしょう。
Lispでは、構文はあなたのものだ。アラン・ケイはLispを「ソフトウェアのマクスウェル方程式」と呼んだ。
HNでの議論
166- GregBuchholz
私の最初の言語は、1980年にCMUで学んだPascalでした…すぐにCS/AIコースでLISP、EEコースでCを学びました。当時はMacLispの大ファンで、GLSが開発したMIT版でした(ソースの至る所に彼のコメントが見られました)。もちろん、GLSはその後Schemeに移行し、クロージャに関する決定的な論文をいくつか書きました。そう、それはPCがどこにでもある前の話で…ずいぶん昔のことです。(C++はずっと後になってから登場しましたが、私は好きではありませんでした。もしあの頃C++が強制されていたら、私はハードウェアの道に留まっていたでしょう。)
GLSは80年代初頭にCMUに移りました…彼の「比較プログラミング言語」の授業を受けたのを覚えています。良い教師で、印象的な人物でした。もちろん言うまでもなく、そのコースではSNOBOLとAPLも扱っていました。思い出です:-)
- SA9G
> 何のための特別な構文もない。
(list '(1. . #\#)
-5/6+7.s-8i
`(1 ,@2)
1@1 ;うーん、アンクォートスプライシングのカンマがない ;-)
10# ;驚いた?
(list #i+1 +1i 1+i) ;複雑か、それとも複素数か?
#e-1e10i ;オールド・マクドナルド?
"(* 9 10)" #())
- M0THXYZ
> 『アメイジング・デジタル・サーカス』(第8話「hjsakldfhl」)で、キンガーがケインをリセットしようとターミナルを開くと、ケイン(1996年に作られたクリエイティブAI)がLispでプログラムされているのが見えます。ファイル名はまさにCaine-core.lispです。
いい演出ですね。第9話でケインが戻ってくる理由が説明できます:Lispの継続は優雅なエラー回復を可能にします。
- M0THXYZ
Racketのファンではありますが、これは親しみやすい入門ではありません。これはスピードランです。
「親しみやすい」入門というとき、ラムダが何か知っていることを前提にしているとは思いません。
「親しみやすい」入門というとき、構文規則が登場するとは思いません。まったく。
- perrygeo
言語自体は興味深いですが、残念ながら、実際に使っている人はほとんどいません。もしかすると、配備の選択肢が面倒だからでしょうか?ネイティブのスタンドアロン実行ファイルを生成できるようになれば、使用が増えると思います。