2012-04-28 16 views
9

私は、人々がしばしばSchemeとRacketがStack Overflowで同じことをしているように行動することに気付きました(例えば、Schemeに関する質問はラケットで解決策を生み出すことがあります。あなたがその答えの半分は#lang racketで始まる参照してくださいよ、をタグ付け。スキームとラケットは異なるのですか?もしそうなら、どうですか?

は、彼らが等しいと考えることができることを本当に似たこれら二つの言語はありますか?あるラケットスキームの拡張子だけ(つまり、Schemeのコードは常に実行されます

私はこれが論争ではなく、Schemeプログラミング言語を勉強している人からの単なる質問であることを強調したいと思います。

+0

@Lord Torgamus:あなたの編集のために本当にありがとうございました:)どのように私は何を言いたいですか? – Aslan986

+2

[Racketはどのようにスキームと異なるのですか?](0120-13753) –

答えて

14

ラケットはSchemeと非常に近く、実際には2年前まではPLT Schemeと呼ばれていました。

しかし、Racketで使用されるデフォルトの言語は、いくつかの場所でSchemeから分岐します(特に、不変のペアがあります)。これは新しいものではなく、PLTスキームと呼ばれるときにも同様の違いがありました。また、Racketに固有のものでもありません。Schemeの標準は非常に単純なので、定義する言語は実用的ではありません。すべて Scheme実装は独自の拡張機能を追加します。 Racketの場合、Racketの場合、新しい方言を定義するのは非常に簡単です.Racketは厳密なR5RS方言(厳密にはそれほど有用ではないという事実)を実装しており、R6RS方言も実装しています。

+0

また、Schemeの本質は、構文マクロやすべてで、「言語拡張」と「追加の便利ライブラリ」の違いが非常にぼやけていることに注意してください。 – user54609

6

いいえ、それらは等しくありません。ただし、Racketの実装では、標準Schemeコードを実行できます。スキームは標準によって定義されます。ラケットはそうではありません。移植性を望むなら、R6RSコードを書いてRacketを使って実行することができます。

RacketはSchemeのスーパーセットまたはサブセットではありません。

+1

"Interpreter"はいくつかの異なるレベルで偽装されています。 –

+1

@EliBarzilayあなたはどんな言葉を見たいですか? –

+3

ラケットはコンパイラです。ラケットコードをバイトコードにコンパイルし、バイトコードをJITコンパイラでマシンコードにコンパイルします。しかし、 "通訳者"と "コンパイラ"の区別は、今日はあまり意味がないものです。 –

関連する問題