1. ホーム
  2. scheme

[解決済み】RacketはSchemeとどう違うのですか?

2022-04-14 05:39:28

質問

RacketはSchemeの子孫にあたります。RacketはR6RSとどう違うのですか?何が追加され、何が削除され、何が違うのでしょうか?

Racketは単なる言語ではなく、言語のためのプラットフォームであることは理解しています。しかし、私が言っているのは、メインのRacketの方言のことです。

どのように解決するのですか?

Racketは最終的にR5RSをベースにしており、R6RSでもなく、どちらの厳密なスーパーセットでもありません。どのScheme標準とも後方互換性がないので、「Scheme」とは呼べないと思います。

ほとんどの実装は拡張機能を提供していますが、それ以外は後方互換性があります。もちろん、Racketに付属するコンパイラはR5RSやR6RSモードで動作させることも可能です。Racketモードで実行される有効なR5/6RS Schemeは、拒絶されるか、実行時エラーが発生するか、あるいは本来の動作とは異なる動作をする可能性があります。とはいえ、後方互換性がないのは主に以下の点です。

  • Racketには set-cdr!set-car! ではなく set-mcar! これは、特にmutableとして作成されたペアに対してのみ機能します。
  • Racketでは letrecletrec* はR5RSには存在せず、R5RSとR6RSが呼ぶものは letrec はRacketには存在しないのです。
  • Racket では、多くのものが自己評価されるため、R5RS ではエラーが発生します。 最も重要なのは、空のリスト .
  • Racketは大文字と小文字を区別するが、R6RSも大文字と小文字を区別する
  • ラケットの処理 ( ... )[ ... ] を等価とした場合、R5RSは等価でないが、R6RSは等価である。

他にもあるかもしれませんが、他のほとんどの部分でラケットはSchemeのスーパーセットです。