1

(quote x)に評価しx、 に(quote (x y z))評価し(x y z)、に(car (quote (x y z))評価することに慣れていxます。理由は単純です。quote は引数を評価せず、そのまま返す特別な形式です。

Racket を使い始めたばかりですが、 がに評価され、 に評価され、 に評価(quote x)されると考えられます。 (quote x)(quote (x y z))(quote (x y z))(car (quote (x y z))(quote x)

実際には、これらをそれぞれ 、 、 と出力しますが、それ'x'(x y z)同じ'xことです。

誰かがここで理由を説明できますか? 何らかの理由で が と(quote (x y z))評価された場合、(quote (x y z))その車は であるべきではありませんquoteか? どこ(quote x)から来たの?

私が知る限り、Racket は、計算全体を通して、私が慣れ親しんでいるのと同じように内部的に動作しますが、最終結果を出力するときになると、それを引用形式でラップします。これはすべての場合に正しいですか?もしそうなら、なぜそれをしたいのですか?

4

2 に答える 2

0

Racket (言語) は、対話ウィンドウ (REPL) に入力されたときだけでなく、常にトップレベルのフォームの結果を出力します。開発を容易にするためであり、実際のアプリケーションでは何の意味もないステートメントがないため、実際のアプリケーションではこれらの行が表示されないためdefine、プログラムを開始する式があり、戻ることができます( void) から出力を強制しないようにします..

#!r6rs言語をどちらかに変更した場合、または#!r5rs定義ウィンドウで評価の結果を取得する唯一の方法は、結果に対して明示的に を使用した場合であることがすぐにわかりますdisplay

使用言語に関係なく、display正しく表示されます。REPL-print の場合、言語と設定が表示方法を制御します。標準の #!racket はdisplay、元の式を display でラップした場合とまったく同じようにラップされた新しい式に配置するように表示することです。

(define test 'hello-world)
(display test) ;; displays hello-world and not 'hello-world
test           ;; displays 'hello-world in #!racket, nothing in R6RS unless in interactions window
于 2014-02-20T17:35:29.307 に答える