[英]behavior of quote in racket
我習慣於(quote x)
評估x
, (quote (xyz))
評估(xyz)
和(car (quote (xyz))
評估x
。推理很簡單:quote 是一種特殊形式不評估它的參數,而只是按原樣返回它。
我剛開始使用 Racket,它認為(quote x)
評估為(quote x)
, (quote (xyz))
評估為(quote (xyz))
,並且(car (quote (xyz))
評估為(quote x)
。
好吧,實際上,它分別將這些打印為'x
、 '(xyz)
和'x
,但這是同一回事。
有人可以解釋這里的推理嗎? 如果出於某種原因, (quote (xyz))
計算結果為(quote (xyz))
,那么該汽車不應該是quote
嗎? (quote x)
從哪里來?
據我所知,在整個計算過程中,Racket 的內部行為與我習慣的一樣,只是在打印最終結果時,它將其包裝在報價表中。 這在所有情況下都是正確的嗎? 如果是這樣,它為什么要這樣做?
Racket 以與任何 Scheme 相同的方式評估表達式。 然而,Racket 在教學語言方面有一位特別的作家。 在 DrRacket 中,您可以更改打印值的方式。 在語言菜單中,單擊高級按鈕,然后查看打印選項。
Racket(語言)打印出頂級表單的結果,不僅在交互窗口(REPL)中輸入時,而且總是。 我猜這是為了簡化開發,在現實世界的應用程序中,您沒有沒有任何意義的語句,因此真實的應用程序不會顯示這些行,因為您已經define
和表達式來啟動您的程序並且您可以返回(void) 從它強制不輸出..
如果您將語言更改為#!r6rs
或#!r5rs
您很快就會發現,在定義窗口中獲得評估結果的唯一方法是在結果上明確使用display
。
無論使用何種語言, display
都能正確顯示。 對於 REPL 打印,語言和設置控制它的顯示方式。 標准的#!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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.