首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DrRacket编写的代码在"R5RS“和"#lang racket”中有什么区别?

用DrRacket编写的代码在"R5RS“和"#lang racket”中有什么区别?
EN

Stack Overflow用户
提问于 2022-03-30 05:52:41
回答 2查看 130关注 0票数 0

编码的语法和代码在两种语言类型上是否有区别?

我用#lang racket语言编写了一个程序,但我应该用"R5RS“类型来编写。

EN

回答 2

Stack Overflow用户

发布于 2022-03-30 13:46:57

简单的回答是,这取决于程序。

#lang racket#lang r5rs有着相同的基本语法,但两者之间可能会有一些小的变化,例如[可以代替(在球拍中使用,但不能在r5rs中使用。

在语义或racket和r5rs方案之间可能还有其他的区别。这意味着相同的程序在作为racket程序或r5rs方案程序运行时可能会有不同的行为。

这种情况通常不是这样的,因为racket和r5rs方案都有很多的语义共享,但是在某些特殊和一致的情况下,r5rs方案的两个不同的实现被允许具有不同的语义。

票数 0
EN

Stack Overflow用户

发布于 2022-03-30 17:58:30

最明显的区别是在博士的球拍REPL。Racket中的规范列表是不可变的,而R5RS中的规范列表是可变的。REPL以不同的方式对待不可变列表和可变列表。

#lang racket中,Dr.racketREPL以这样的方式响应(通过一个不变的列表):

代码语言:javascript
复制
> '(a b)
'(a b)

#lang r5rs中,Dr.racketREPL以这种方式响应(因为REPL以这种方式显示可变列表):

代码语言:javascript
复制
> '(a b)
(mcons 'a (mcons 'b '()))

我认为这就是它与更典型的REPL行为不同的原因。典型的Scheme REPLs的反应是这样的(没有在响应中引用):

代码语言:javascript
复制
> '(a b)
(a b)

有趣的是,随着#lang r5rsdisplaywrite的行为在博士的球拍预期的方式:

代码语言:javascript
复制
> (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 '()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71672143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档