Linux上の DrRacket | |
| パラダイム | マルチパラダイム:関数型、命令型、論理型、メタ型、モジュール型、オブジェクト指向型、リフレクティブ型 |
|---|---|
| 家族 | リスプ |
| デザイン: | 株式会社PLT |
| 開発者 | 株式会社PLT |
| 初登場 | 1995年1月28日 |
| 安定リリース | 8.14 [1]
/ 2024年8月19日 |
| タイピングの規律 | 動的、静的、強い |
| プラットフォーム | x86、PowerPC、SPARC、MIPS、ARM |
| OS | クロスプラットフォーム |
| ライセンス | MITまたはApache 2.0 [2] |
| ファイル名拡張子 | .rkt [3] |
| Webサイト | ラケットlang.org |
| 主な実装 | |
| Racket、RacketScript Racket から JavaScript (ES6) へのコンパイラー、Pycket (RPython を使用した Racket 実装)。 | |
| 方言 | |
| タイプラケット、FrTime、レイジーラケット、落書き | |
| 影響を受けた | |
| エッフェル、[4] スキーム | |
| 影響を受けた | |
| Clojure、[5] Rust、[6] [7] Scheme (R6RS) [8] | |
Racketは、汎用のマルチパラダイムプログラミング言語です。Racket言語はLispの現代的な方言であり、 Schemeの後継です。プログラミング言語の設計と実装のためのプラットフォームとして設計されています。[9]コアとなるRacket言語に加えて、Racketはプログラミング言語ファミリー[10]やRacket上での開発をサポートするツールセットを指すこともあります。[11] Racketはスクリプト、コンピュータサイエンスの教育、研究 にも使用されています。
Racketプラットフォームは、Racket言語の実装(ランタイムシステム、[12]、ライブラリ、およびマシンコード、マシン非依存、インタープリタ、JITの複数のコンパイルモードをサポートするコンパイラを含む)と、Racketで記述されたDrRacket統合開発環境(IDE)を提供します。[13] Racketは、コンピュータサイエンスを「リベラルアーツカリキュラムの不可欠な部分」にすることを目指しているProgramByDesignアウトリーチプログラムで使用されています。[14] [15]
コアとなるRacket言語は、組み込み言語やドメイン固有言語、クラスやモジュールなどの言語構成要素、異なるセマンティクスを持つRacketの個別の方言の作成を可能にする広範なマクロシステムで知られています。[16] [17] [18] [19]
プラットフォームの配布は、Apache 2.0およびMITライセンスの下で配布される無料のオープンソースソフトウェアです。[20]コミュニティによって書かれた拡張機能とパッケージは、Racketのパッケージカタログにアップロードできます。
歴史
発達
Matthias Felleisen は1990 年代半ばに PLT Inc. を設立しました。最初は研究グループとして、その後すぐに初心者プログラマー向けの教育用資料 (講義、演習/プロジェクト、ソフトウェア) を作成するプロジェクトとして設立されました。1995 年 1 月、グループはSchemeをベースにした教育用プログラミング環境を開発することを決定しました。Matthew Flatt は、libscheme、[21] wxWidgets、およびその他のフリーシステムをいくつか組み合わせて、Racket の元の仮想マシンである MrEd を作り上げました。 [22]その後の数年間で、Flatt やRobby Findler、Shriram Krishnamurthi、Cormac Flanagan などを含むチームが DrScheme を作成しました。これは初心者 Scheme プログラマー向けのプログラミング環境であり、ソフトタイピングの研究環境でもあります。[13] DrScheme がサポートしていた主な開発言語は PLT Scheme と名付けられました。
並行して、チームは高校教師向けのワークショップを実施し、プログラム設計と関数型プログラミングのトレーニングを開始しました。これらの教師と生徒とのフィールドテストから、開発の方向性を決める重要な手がかりが得られました。
その後数年間にわたり、PLTは教育言語、代数ステップ[23] 、透過的な読み取り-評価-印刷ループ、コンストラクタベースのプリンタ、その他多くの革新をDrSchemeに追加し、アプリケーション品質の教育プログラム開発環境を生み出しました。2001年までに、コアチーム(Felleisen、Findler、Flatt、Krishnamurthi)は、彼らの教育哲学に基づいて 最初の教科書「How to Design Programs」を執筆し出版しました。
ラケット宣言[9]では、ラケットの開発を推進する原則を詳しく説明し、設計プロセスの背後にある評価フレームワークを提示し、将来の改善の機会について詳しく説明しています。
バージョン履歴
PLT Schemeの改訂版の第1世代では、モジュールとクラスの両方を使用して大規模プログラミングを行う機能が導入されました。バージョン42では、大規模開発向けにクラスを補完するファーストクラスのモジュールシステムであるユニットが導入されました。[24]クラスシステムは、これらのバージョンを通じて機能(Javaスタイルのインターフェイスなど)を獲得し、いくつかの機能(多重継承など)を失いました。[16] この言語は、いくつかの連続したバージョンを通じて進化し、バージョン53で画期的な人気を獲得し、広範な作業と、現在の一般的なバージョンシステムでの「1.0」リリースに相当する次のバージョン100につながりました。
次のメジャーリビジョンはバージョン200と呼ばれ、マクロと連携する新しいデフォルトモジュールシステムが導入されました。[24]特に、モジュールシステムは実行時とコンパイル時の計算が分離され、「言語の塔」をサポートします。[25]ユニットとは異なり、これらのモジュールはファーストクラスオブジェクトではありません。
バージョン300では、 Unicodeのサポート、外部ライブラリのサポート、クラスシステムの改良が導入されました。[24] その後、300シリーズでは、 JITコンパイラの追加とデフォルトの世代別ガベージコレクションへの切り替えにより、言語ランタイムのパフォーマンスが向上しました。
次のメジャーリリースまでに、プロジェクトはより一般的なシーケンスベースのバージョン番号に切り替えました。バージョン4.0では#lang、モジュールが記述されている言語を指定するためのショートカットが導入されました。さらに、この改訂では、不変のペアとリスト、細粒度の並列処理のサポート、静的に型付けされた方言が導入されました。[26]
2010年6月7日、PLT SchemeはRacketに改名されました。[27]改名はバージョン5.0のリリースと同時に行われました。その後、バージョン5.1では、すべてのプラットフォームでネイティブUIツールキットを使用して、グラフィカルユーザーインターフェイス(GUI)バックエンドがC++からRacketに書き直されました。[22]バージョン5.2には、バックグラウンド構文チェックツール、新しいプロットライブラリ、データベースライブラリ、および新しい拡張REPLが含まれていました。[28]バージョン5.3には、オプションでロードされたモジュール用の新しいサブモジュール機能、[29]新しい最適化ツール、JSONライブラリ、およびその他の機能が含まれていました。[30]バージョン5.3.1では、DrRacketに大きな改善が導入されました。バックグラウンド構文チェッカーがデフォルトでオンになり、新しいドキュメントプレビューツールが追加されました。[31]
バージョン6.0では、Racketは第2世代のパッケージ管理システムをリリースしました。この開発の一環として、主要なDrRacketとRacketリポジトリが再編成され、小さなパッケージの大きなセットに分割され、最小限のRacketをインストールし、必要なパッケージのみをインストールできるようになりました。[32]
Racketのバージョン7は、 Chez Schemeランタイムシステムへの移行と複数のランタイムシステムのサポートの準備の一環として、Racketで書かれた新しいマクロエクスパンダーとともにリリースされました。 [33] [34] 2019年11月19日、Racket 7.5がリリースされました。Racket 7.5のライセンスはより制限が少なくなり、Apache 2.0ライセンスまたはMITライセンスのいずれかが使用されるようになりました。[35] [36]
2021年2月13日、Racket 8.0がリリースされました。Racket 8.0は、 Racket CSとして知られるChez Schemeランタイムシステムを搭載したRacketがデフォルトの実装となった最初のリリースです。Racket CSはより高速で、保守と開発が容易で、既存のRacketプログラムとの下位互換性があり、並列ガベージコレクションが優れています。[37]
特徴
Racketのコア言語には、マクロ、モジュール、レキシカルクロージャ、末尾呼び出し、区切られた継続、[38]パラメータ(流動変数)、ソフトウェア契約、[39] グリーンスレッドとOSスレッド、[40] [41] [42]などが含まれます。また、イベントスペースやカストディアンなどのプリミティブも付属しており、リソース管理を制御し、言語が他のプログラムをロードして管理するためのオペレーティングシステムのように動作できるようにします。[12]言語のさらなる拡張は、強力なマクロシステムを使用して作成され、モジュールシステムやカスタムパーサーとともに、言語のあらゆる側面を制御できます。[43] Racketのほとんどの言語構成要素は、基本言語でマクロとして実装されています。これらには、ミックスインクラスシステム、[16] MLモジュールシステムの不透明な帰属と同じくらい表現力豊かなコンポーネント(またはモジュール)システム、[17]およびパターンマッチングが含まれます。
さらに、この言語は高階プログラミング言語としては初の契約システムを備えています。[44] Racketの契約システムはEiffelのDesign by Contractの研究に触発され、それを拡張して第一級関数、オブジェクト、参照セルなどの高階値に機能するようにしています。たとえば、契約によってチェックされるオブジェクトは、そのメソッドが最終的に呼び出されるときに契約チェックが行われるようにすることができます。
Racket には、バイトコード コンパイラとJIT (JIT) コンパイラの両方が含まれています。バイトコード コンパイラは、Racket仮想マシンによって実行される内部バイトコード形式を生成し、JIT コンパイラは実行時にバイトコードをマシン コードに変換します。
2004年以降、この言語にはPLaneTも同梱されている。PLaneTはモジュールシステムに統合されたパッケージマネージャで、サードパーティのライブラリを透過的にインポートして使用できる。また、PLaneTには依存性地獄を防ぐためのバージョン管理ポリシーが組み込まれている。[45]
2014年末、Racketのコードの多くはメインコードベースとは別の新しいパッケージングシステムに移行されました。この新しいパッケージングシステムは、racoというクライアントプログラムによって提供されます。新しいパッケージシステムはPLaneTよりも機能が少なくなっています。RacketブログのJay McCarthyによるブログ投稿では、変更の理由と古いシステムを複製する方法が説明されています。[46]
統合された言語拡張性とマクロ
Racket を Lisp ファミリーの他の言語と最も明確に区別する機能は、新しいドメイン固有言語と汎用言語の構築をサポートする統合言語拡張機能です。Racket の拡張機能はモジュール システムに組み込まれており、コンテキスト依存のモジュール レベルの構文制御が可能です。[18]たとえば、構文形式をオーバーライドして、関数適用のセマンティクスを変更できます。同様に、この形式では、モジュール全体の任意の静的分析が可能です。[18]表記法を介して、任意のモジュールを言語として使用できるため、事実上、言語のあらゆる側面をプログラムおよび制御できます。
#%app#%module-begin#lang
モジュールレベルの拡張機能は、Schemeのような健全なマクロシステムと組み合わされており、LispのS式操作システム、[47] [48] Scheme 84の健全な拡張構文マクロ、またはR5RSの構文ルールよりも多くの機能を提供します。実際、マクロシステムはコンパイラ拡張のために注意深く調整されたアプリケーションプログラミングインターフェース(API)であると言っても過言ではありません。このコンパイラAPIを使用すると、プログラマは組み込みの言語構成要素とまったく区別がつかない方法で 機能やドメイン固有言語全体を追加できます。
Racketのマクロシステムは、言語方言全体を構築するために使用されてきた。これには、Racketの徐々に型付けされる方言で、型なしコードから型付きコードへの移行を容易にするTyped Racket [49]、遅延評価の方言であるLazy Racket [50] 、HaskellとRacketを組み合わせたHackett [51]などがある。教育用プログラミング言語Pyretは、もともとRacketで実装された。[52] [53]
その他の方言としては、FrTime(関数型リアクティブプログラミング)、Scribble(ドキュメンテーション言語)[54] 、 Slideshow(プレゼンテーション言語)[55]、教育用の言語などがある。[56] [57]
Racketのコアディストリビューションは、プログラミング言語の開発を支援するライブラリを提供します。[18]このような言語は、 S式ベースの構文に限定されません。従来の読み取り可能ベースの構文拡張に加えて、ディレクティブは、#langパーサーツールライブラリを使用して実装できる任意のパーサーの呼び出しを可能にします。[58]このような言語の例については、
Racketロジックプログラミングを参照してください。
プログラミング環境
言語プラットフォームは、 DrRacketと呼ばれる自己ホスト型 IDE [13]、継続ベースのWebサーバー[59]、グラフィカルユーザーインターフェイス[ 22]、およびその他のツールを提供します。一般的なスクリプト言語のようなライブラリを備えた実用的なスクリプトツールとして、Unixシェルのスクリプトに使用できます。コマンドライン引数を解析し、外部ツールを実行できます。
DrRacket IDE
DrRacket (旧称 DrScheme) は、Scheme または Racket を教える入門コンピュータ サイエンス コースで広く使用されており、そのシンプルさと初心者プログラマーへのアピール力が高く評価されています。この IDE は、もともと、ノースイースタン大学といくつかの関連大学が高校生を大学レベルのコンピュータ サイエンス コースに誘致するため に実施したアウトリーチ活動である TeachScheme! プロジェクト (現在はProgramByDesign )で使用するために構築されました。
このエディタは、構文エラーと実行時エラーの強調表示、括弧のマッチング、デバッガ、代数ステップ機能を備えています。学生に優しい機能として、複数の「言語レベル」(初級学生、中級学生など) のサポートがあります。また、統合ライブラリ サポートと、上級プログラマ向けの高度な分析ツールも備えています。さらに、モジュール ブラウザ、コンター ビュー、統合テストとカバレッジ測定、リファクタリング サポートにより、モジュール指向プログラミングがサポートされています。また、統合されたコンテキスト依存のアクセスにより、「ヘルプ デスク」という広範なハイパーリンク ヘルプ システムにアクセスすることができます。
DrRacket は、 X Window Systemを搭載したWindows、macOS、Unix、Linuxで使用でき、プログラムはこれらすべてのプラットフォームで同様に動作します。
コード例
#lang racket
「こんにちは、世界!」
このプログラムを実行すると、次の出力が生成されます。
- "こんにちは世界!"
以下に、少しばかり単純なプログラムを示します。

#lang racket
( 2htdp/imageが必要)
(シェルピンスキー([ n 8 ])とします( (ゼロ? n ) (三角形2 '実線'赤)とします( [ t (シェルピンスキー( - n 1 ))])とします( tの上( tの横t ))))))
このプログラムは、Racket の Web サイトから取得したもので、深さ 8 にネストされたSierpinski 三角形を描画します。
ディレクティブを使用すると#lang、ソース ファイルを Racket のさまざまな方言で記述できます。以下は、Racket の
静的型付け方言である Typed Racket での階乗プログラムの例です。
#lang入力済み/ラケット
( : fact (整数->整数)) ( define (事実n ) ( if (ゼロ? n ) 1 ( * n (事実( - n 1 )))))
実装
Racketには現在2つの実装があります。どちらもさまざまなアーキテクチャ上のLinux、Windows、MacOSをサポートしており、バージョン8.8(2023)でサポートされています。デフォルトの実装では、Chez Schemeインクリメンタルコンパイラとランタイムを使用します。代替実装では、プラットフォームに依存しないバイトコードを生成し、ロード時にジャストインタイムコンパイルを使用してマシンコードを生成します。 [60]
さらに、実験的な実装もあります。
- RacketScriptは、RacketからJavaScript(ES6)への実験的なコンパイラです。これにより、プログラマーはJavaScriptとRacketのエコシステムの両方を使用でき、この相互運用性を可能な限りスムーズにすることを目的としています。[61]
- PycketはRPythonフレームワークを使用して生成されたRacket実装です。[62]
応用と実用
プログラミング言語理論を基盤としていることとは別に、Racketは生産システム向けの汎用言語として設計されました。したがって、Racketディストリビューションには、システムおよびネットワークプログラミング、Web開発、[59]基盤となるオペレーティングシステムへの統一されたインターフェイス、動的な外部関数インターフェイス、[63]さまざまな種類の正規表現、レクサー/パーサージェネレーター、[58] ロジックプログラミング、および完全なGUIフレームワークをカバーする広範なライブラリが含まれています。
Racket には、Windows、macOS、Unix でスタンドアロン実行ファイルをコンパイルする機能、統合開発環境(IDE)に含まれるプロファイラーとデバッガー、ユニット テストフレームワークなど、商用言語に役立つ機能がいくつか備わっています。
Racketは商用プロジェクトやウェブアプリケーションに使用されています。注目すべき例としては、 Racketで開発されたArcで動作するHacker Newsウェブサイトがあります。Naughty Dogはいくつかのビデオゲームでスクリプト言語としてRacketを使用しています。[64]
ラケットは、ブートストラッププログラムでゲームデザインを通じて生徒に代数を教えるために使用されます。[65]
参考文献
- ^ “Racket v8.14”. 2024年8月19日. 2024年8月12日閲覧。
- ^ Tobin-Hochstadt, Sam; Gerard, Sage; Dueck, Joel; Flatt, Matthew ; Software Freedom Conservancy ; Chestek, Pamela (2019-11-15). 「Racket の再ライセンス作業の完了」 。2019年 12 月 27 日閲覧。
- ^ 「DrRacket Files」 。 2019年7月21日閲覧。Racket
プログラムファイルの標準ファイル拡張子は「.rkt」です。拡張子「.ss」、「.scm」、および「.sch」も歴史的に人気があります。
- ^ Strickland, TS; Fellesisen, Matthias (2010). 「DLS 2010: ファーストクラスクラスの契約」(PDF)。
- ^ Bonnaire-Sergeant, Ambrose (2012). Clojure の実用的なオプション型システム(論文). 西オーストラリア大学.
- ^ 「Planet2の質問」。
- ^ 「Rust 参考文献」。GitHub。2022年11月23日。
- ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; 他 (2007 年 8 月)。「Revised6 Report on the Algorithmic Language Scheme (R6RS)」。Scheme 運営委員会。2011年 9 月 13 日閲覧。
- ^ ab Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S.; Barzilay, E.; McCarthy, J.; Tobin-Hochstadt, S. (2015). 「ラケット宣言」(PDF)。プログラミング言語の進歩に関する第 1 回サミットの議事録: 113–128。
- ^ 「ラケットとスキームの方言」。2011年8月15日閲覧。
- ^ 「Welcome to Racket」2019年5月15日閲覧。
- ^ ab Flatt; Findler; Krishnamurthi; Felleisen (1999)。オペレーティングシステムとしてのプログラミング言語(あるいは、Lispマシンの息子の復讐)。国際関数型プログラミング会議。
- ^ abc Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). 「DrScheme: Scheme 用のプログラミング環境」(PDF) . Journal of Functional Programming .
- ^ Felleisen、Findler、Flatt、Krishnamurthi (2004)。「TeachScheme! プロジェクト: すべての学生のためのコンピューティングとプログラミング」。Journal of Computer Science Education。
- ^ 「概要」。Program by Design 。 2011年8月17日閲覧。
- ^ abc Flatt, M.; Findler, RB; Felleisen, M. (2006). 「クラス、Mixin、および Traits を使用した Scheme」(PDF) . Asian Symposium on Programming Languages and Systems .
- ^ ab Flatt, M.; Felleisen, M. (1998). 「Units: 注目の言語のためのクールなモジュール」.プログラミング言語の設計と実装.
- ^ abcd Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). 「ライブラリとしての言語」(PDF) .プログラミング言語の設計と実装.
- ^ Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (2018). 「プログラム可能なプログラミング言語」. Communications of the ACM . 61 (3): 62–71. doi :10.1145/3127323. S2CID 3887010.
- ^ 「Racket: ソフトウェアライセンス」。2015年10月20日閲覧。
- ^ Benson, Brent W. Jr. (1994 年 10 月 26 ~ 28 日)。「libscheme: C ライブラリとしての Scheme」。ニューメキシコ州サンタフェで執筆。USENIXシンポジウムの超高水準言語に関する議事録。カリフォルニア州バークレー: USENIX 協会。pp. 7 ~19。ISBN 978-1880446652. 2013年7月7日閲覧。
- ^ abc 「Racket のグラフィック レイヤーの再構築」 2010 年 12 月 8 日. 2017 年 12 月 11 日閲覧。
- ^ Clements, J.; Flatt, M.; Felleisen, M. (2001). 「代数ステッパーのモデリング」(PDF) .ヨーロッパプログラミング言語シンポジウム.
- ^ abc 「Racket Core リリースノート」。2013年7月5日時点のオリジナルよりアーカイブ。2012年4月15日閲覧。
- ^ Flatt, M. (2002). 「構成可能かつコンパイル可能なマクロ」。国際関数型プログラミング会議。
- ^ 「PLT Scheme version 4.0」 2008-06-12. 2013-02-02時点のオリジナルよりアーカイブ。2012-08-07に閲覧。
- ^ 「PLTスキームからRacketへ」。Racket-lang.org 。2011年8月17日閲覧。
- ^ 「Racket 5.2」。PLT, Inc. 2011-11-09。2012-06-16に閲覧。
- ^ 「サブモジュール」 2012年6月3日. 2012年8月7日閲覧。
- ^ 「Racket 5.3」。PLT, Inc. 2012-08-07 . 2012-08-07閲覧。
- ^ 「Racket 5.3.1」。PLT, Inc. 2012-11-07 . 2012-11-07閲覧。
- ^ 「Racket 6.0」。PLT, Inc. 2014-02-26 . 2016-02-23閲覧。
- ^ “Racket-on-Chez Status: January 2018”. 2018年1月5日. 2018年6月28日時点のオリジナルよりアーカイブ。2018年4月13日閲覧。
- ^ 「Chez Scheme での Racket の構築 (体験レポート)」(PDF) 2019 年 8 月 1 日. 2019 年 7 月 25 日閲覧。
- ^ 「Racket 7.5 リリース」。Packt Hub。2019年11月22日。 2019年11月28日閲覧。
- ^ 「Racket v7.5」。Racket | ブログ。 2019年11月28日閲覧。
- ^ 「ラケットv8.0」。
- ^ Flatt, M.; Yu, G.; Findler, RB; Felleisen, M. (2007). 「プロダクションプログラミング環境への限定された構成可能な制御の追加」(PDF)。国際関数型プログラミング会議。
- ^ 「契約」.
- ^ 「スレッド」.
- ^ 「先物」.
- ^ 「場所」.
- ^ Flatt, Matthew (2012). 「Racket での言語の作成」Communications of the ACM . 2012-04-08閲覧。
- ^ Findler, RB; Felleisen, M. (2002). 「高階関数の契約」(PDF)。国際関数型プログラミング会議。
- ^ Matthews, J. (2006). 「PLaneT によるコンポーネントのデプロイメント: どこに配置したいか?」Scheme と関数型プログラミング ワークショップ。
- ^ 「Racket パッケージ システムと Planet」。
- ^ Flatt, Matthew (2002). 「構成可能でコンパイル可能なマクロ、いつ必要になるのか?」(PDF)。国際関数型プログラミング会議。
- ^ Flatt、Culpepper、Darais、Findler、「連携して動作するマクロ、コンパイル時のバインディング、部分展開、定義コンテキスト」
- ^ Tobin-Hochstadt, S.; Felleisen, M. (2008). 「Typed Scheme の設計と実装」.プログラミング言語の原則.
- ^ Barzilay, E.; Clements, J. (2005). 「苦労せずに怠惰に: 教育のための遅延言語と厳密な言語の組み合わせ」教育における関数型プログラミングと宣言型プログラミング。
- ^ 「The Hackett Programming Language」。Alexis Kingのブログ。 2019年6月16日閲覧。
- ^ The Pyret Crew (2011年5月24日). 「Pyretコード、またはPyretプログラミング言語の根拠」. Pyret . 2019年6月16日閲覧。
- ^ 「プログラミングとプログラミング言語」。/ の索引。 2017年9月20日。 2019年6月16日閲覧。
- ^ Flatt, M.; Barzilay, E.; Findler, RB (2009). 「Scribble: アドホック ドキュメンテーション ツールの終焉」.国際関数型プログラミング会議。
- ^ Findler, RB; Flatt, M. (2004). 「スライドショー: 関数型プレゼンテーション」.関数型プログラミングに関する国際会議。
- ^ Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S. (2009). 「関数型 I/O システム (または新入生向けの楽しみ)」(PDF)。国際関数型プログラミング会議。
- ^ Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S. (2004). 「コンピュータサイエンスカリキュラムの構造と解釈」(PDF) . Journal of Functional Programming . 14 (4): 365–378. doi :10.1017/S0956796804005076.
- ^ ab 「パーサーツール: lex および yacc スタイルの解析」。2011年 8 月 16 日閲覧。
- ^ ab Krishnamurthi、Hopkins、McCarthy、Graunke、Pettyjohn、Felleisen (2007)。「PLT Scheme Web サーバーの実装と使用」( PDF)。Journal of Higher-Order and Symbolic Programming。20 ( 4): 431–460。doi : 10.1007 /s10990-007-9008-y。S2CID 17731194 。
- ^ 実装
- ^ ラケットスクリプト
- ^ ピケット
- ^ Barzilay, E.; Orlovsky, D. (2004). 「PLT Scheme の外部インターフェイス」(PDF) . Scheme と関数型プログラミング.
- ^ 「ゲーム開発における機能的な mzScheme DSL」 。2012年 5 月 8 日閲覧。
- ^ 「Bootstrap」。bootstrapworld.org 。 2015年8月11日閲覧。
さらに読む
- Felleisen他、2013 年。Realm of Racket。No Starch Press。
- Felleisen他、2003 年。 『プログラムの設計方法』 MIT 出版。
外部リンク
- 公式サイト
