簡體   English   中英

在“R5RS”和“#lang racket”中用 DrRacket 編寫的代碼有什么區別?

[英]What is the difference between of code written in DrRacket in "R5RS" vs "#lang racket"?

兩種語言類型的編碼語法或代碼是否相同?

我用#lang 球拍語言寫了一個程序,但我應該用“R5RS”類型來做。

簡短的回答是,這取決於程序。

#lang racket#lang r5rs共享相同的基本語法,但兩者之間可能會有更小的變化,例如[可以代替(在 racket 中使用,但不能在 r5rs 中使用。

語義或球拍和 r5rs 方案之間可能存在其他差異。 這意味着同一個程序在作為 racket 程序或 r5rs scheme 程序運行時可能會有不同的行為。

通常情況並非如此,因為 racket 和 r5rs 方案共享很多語義,但 r5rs 方案的兩種不同實現在某些特殊和商定的情況下允許具有不同的語義。

最明顯的區別在於 Dr. Racket REPL。 Racket 中的規范列表是不可變的,而 R5RS 中的規范列表是可變的。 並且 REPL 以不同的方式對待不可變和可變列表。

#lang racket中,Dr. Racket REPL 以這種方式響應(使用不可變列表):

> '(a b)
'(a b)

#lang r5rs中,Dr. Racket REPL 以這種方式響應(因為 REPL 以這種方式顯示可變列表):

> '(a b)
(mcons 'a (mcons 'b '()))

我相信這就是它的 REPL 行為與更典型的 Schemes 不同的原因。 典型的 Scheme REPL 以這種方式響應(響應中沒有引用):

> '(a b)
(a b)

有趣的是,使用#lang r5rs ,在 Dr. Racket 中以預期的方式displaywrite行為:

> (define x '(a b))
> x
(mcons 'a (mcons 'b '()))
> (display '(a b))
(a b)
> (display x)
(a b)
> (write '(a b))
(a b)
> (write x)
(a b)
> x
(mcons 'a (mcons 'b '()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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