「標準スキーム(Racket IDE内)」とは、Racket言語を意味します。つまり、コードの前にプレフィックスを付けると、#lang racket,
次の4つの違いに注意する必要があります。
- 別のモジュールシステム
- 別のマクロシステム(コードの古さによって異なります)
- 不変の短所-セル(可変のセルをインポートしない限り)
- ラケットに片腕のifはありません(使用
when
)
GuileからRacketにコードを移植するには、依存関係の「最下部」にあるファイルを見つけます。つまり、他のファイルに依存しないファイルを見つけます。このようなファイルをRacketで開き、上部に#lang Racketという行を追加して、実行してみます。
ほとんどの場合、「バインドされていない識別子」エラーが発生します。運が良ければ、この関数はRacketにありますが、「racket」言語には含まれていません。Racketのドキュメントで名前を検索し、見つかった場合は、(require ...)を使用して名前をプログラムにインポートします。
次に、プログラムを再度実行して、次のエラーを見つけます。
一部の関数は、GuileとRacketで異なる名前が付けられているため、Guileのドキュメントで名前を調べて、その機能を確認してください。次に、同じ主題に関するRacketのドキュメントを開き、Racketで何と呼ばれるかを確認します。
場合によっては、より大きな変更を加える必要があります。Racketのドキュメントに機能の一部が見つからない場合は、メーリングリストに問い合わせてみてください。単に別の名前であるか、誰かがそれを実装してPLaneTに配置した可能性があります(したがって、パッケージをインストールするまでドキュメントに表示されません)。
srfi/1をR5RS言語にインポートする例。
#lang r5rs
(#%require srfi/1)
(xcons 1 2)
R4RSコードと最新のSchemeの違いは?
注意すべきことの1つは、R4RSでは空のリスト'()がfalseとしてカウントされ、trueとして解釈されないことです。
注意すべきその他の事項については、この質問を参照してください。
SICPパターンマッチングルールベースの置換コードの実行
R5RS標準からの変更のリストも参照してください:
R4RSからR5RSへの変更のリスト