15

RacketSchemeIDEで実行したい「レガシー」GuileSchemeコードがたくさんあります。これを重要な演習にするのに十分な違いがあるようです。(Schemeの知識の私のレベルは、The Little Schemerを完了するためのレベルです)。

私の質問は:

  1. Guileスキームと標準スキーム(Racket IDE内)の違いは何ですか?
  2. これらの違いに照らして、一般的に、いくつかのGuileスキームコードを標準スキームに変換するために必要な手順は何ですか?

追加: (RacketSchemeとR5RS/R6RSの相違に満足)-私が欲しいのは、Racket言語ではなく、RacketIDEで「何か」を実行することです。

4

1 に答える 1

7

「標準スキーム(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への変更のリスト

于 2012-05-17T13:29:27.470 に答える