簡體   English   中英

球拍中的報價行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM