2012-05-17 21 views
11

ラケットスキームIDEで実行したい「レガシー」Guile Schemeコードがたくさんあります。これを自明な行為にするには十分な相違があるようです。 (私のスキーム知識レベルは、リトル・スキーマを完成させるレベルです)。Guile SchemeとStandard Scheme(Racket IDE)の違いは?

私の質問は:

  1. ガイルスキームと(ラケットIDEで)標準スキームの違いは何ですか?
  2. これらの違いに照らして、一般的に、いくつかのGuile Scheme Codeを標準Schemeに変換するために必要なステップは何ですか?

追加:(ラケットスキームおよびR5RS/R6RSの乖離と幸せ) - というよりもラケット言語 - 私が欲しいのはラケットIDEで実行するための「何か」を取得することです。で、「(ラケットIDEで)標準スキーム、」あなたは、あなたがのために外を見るために#lang racket,その後、トップ4の違いがあなたのコードの前に付ける際に何を得るラケット言語、すなわち、意味場合

+1

あなたはR5RSと密接に立ち往生している場合と、 R6RS規格に準拠していれば、Racketに組み込まれている互換性言語が役立ちます。参照:http://docs.racket-lang.org/guide/standards.html – dyoo

+1

DrRacket(R5RS/racket/etc)で宣言する言語を指定できますか?コードが壊れている場所の例を挙げることができますか? – oobivat

+0

@oobivat私は故意にネットを席巻しました。私の疑問の背後にある疑問は、「guileスキームの非標準的なものは何ですか?質問に答えるのが簡単な場合は、「R5RSに設定されているRacketで実行しているときに、1994年のguile計画コードで何が破損する可能性がありますか? – hawkeye

答えて

5

です:

  • 異なるモジュールシステム
  • (あなたのコードは何歳に応じて)異なるマクロシステム
  • 不変短所細胞(あなたが変更可能なものを輸入しない限り)
  • ラケットで無片腕IFS(whenを使用します)

GuileからRacketへの移植コードには、依存関係の「最下位」にあるファイル、つまり他のファイルに依存しないファイルを見つけることができます。 そのようなファイルをRacketで開き、一番上に#langラケットを追加して実行してみてください。

「バインドされていない識別子」のエラーが発生する可能性があります。 あなたが運が良ければ、関数はラケットに存在しますが、ラケット言語には含まれていません。 Racketのドキュメントで名前を検索し、見つかったら(require ...)を使用して名前をプログラムにインポートします。

次に、プログラムを再度実行して、次のエラーを見つけます。

GuileとRacketでは機能が異なるため、Guileのドキュメントで名前を調べて、その動作を確認してください。その後、同じテーマのRacketドキュメントを開いて、Racketで何が呼び出されているかを確認します。

より大きな変更が必要な場合があります。 Racketのドキュメントで機能が見つからない場合は、メーリングリストにお尋ねください。単に別の名前を持つか、誰かがそれを実装してPLaneTに置くことができます(したがって、パッケージをインストールするまでドキュメントには表示されません)。


srfi/1をR5RS言語にインポートする例。近代的なスキームにR4RSコードから

#lang r5rs 
(#%require srfi/1) 
(xcons 1 2) 

違い?

注目すべき点の1つは、R4RSでは空リスト '()は偽とカウントされ、真と解釈されません。

のために外を見るために多くのもののため、この質問を参照してください:

Running SICP Pattern Matching Rule Based Substitution Code

参照R5RSの標準からの変更のも、このリスト: List of changes from R4RS to R5RS

+3

DrRacketでポスターがR5RSまたはR6RSの言語を聞いていた可能性があります。 –

+0

サムに感謝 - すべての可能な情報を得るためにネットを広げていました。上記のコメントはRacket特有のものであり、R5RSには当てはまりません。 – hawkeye