3

次の s 式を考えてみましょう。

((lambda (car) (car (quote (a b c)))) cdr)

私が試したほとんどのスキームの実装では、 this は と評価されます。これ(b c)cdr、 という名前のラムダに渡され、carのプリミティブな実装よりも優先されcarます。

The Little Schemer は、第 10 章の scheme で記述された scheme の実装を提供します。その実装はa上記の式を返しますが、これは私には正しくないようです。

その実装がそのように振る舞う理由は明らかです: プリミティブ関数の名前はhere*constではなくとして扱われます。数値でもブール値でもない はプリミティブとしてレンダリングされ、これは最終的に実際のプリミティブ組み込まれます。*identifier *const

正しい実装は、プリミティブ名を特別に検出するのではなく、プリミティブ名を実際のプリミティブ実装にマッピングするエントリを含む値関数に初期テーブルを作成することだと思います。

私の質問は次のとおりです。これは The Little Schemer のスキームの実装のバグですか? この行動はスキームで明確に規定されているのでしょうか、それとも本書が書かれた 1974 年には明確に規定されていなかったのでしょうか?

4

1 に答える 1