编码的语法和代码在两种语言类型上是否有区别?
我用#lang racket语言编写了一个程序,但我应该用"R5RS“类型来编写。
发布于 2022-03-30 13:46:57
简单的回答是,这取决于程序。
#lang racket和#lang r5rs有着相同的基本语法,但两者之间可能会有一些小的变化,例如[可以代替(在球拍中使用,但不能在r5rs中使用。
在语义或racket和r5rs方案之间可能还有其他的区别。这意味着相同的程序在作为racket程序或r5rs方案程序运行时可能会有不同的行为。
这种情况通常不是这样的,因为racket和r5rs方案都有很多的语义共享,但是在某些特殊和一致的情况下,r5rs方案的两个不同的实现被允许具有不同的语义。
发布于 2022-03-30 17:58:30
最明显的区别是在博士的球拍REPL。Racket中的规范列表是不可变的,而R5RS中的规范列表是可变的。REPL以不同的方式对待不可变列表和可变列表。
在#lang racket中,Dr.racketREPL以这样的方式响应(通过一个不变的列表):
> '(a b)
'(a b)在#lang r5rs中,Dr.racketREPL以这种方式响应(因为REPL以这种方式显示可变列表):
> '(a b)
(mcons 'a (mcons 'b '()))我认为这就是它与更典型的REPL行为不同的原因。典型的Scheme REPLs的反应是这样的(没有在响应中引用):
> '(a b)
(a b)有趣的是,随着#lang r5rs,display和write的行为在博士的球拍预期的方式:
> (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 '()))https://stackoverflow.com/questions/71672143
复制相似问题