mud*_*dge 174 lisp scheme racket
Racket是Scheme的后代.Racket与R6RS有何不同?它添加或带走了什么,或者只是不同?
据我所知,Racket不仅仅是一种语言,它还是一种语言平台.但我指的是主要的球拍方言.
Zor*_*orf 125
Racket最终基于R5RS,而不是R6RS而不是两者的严格超集.我不认为它可以称为'Scheme',因为它不会向后兼容任何Scheme标准.
大多数实现都提供扩展,但在其他方面是向后兼容的,当然,Racket附带的编译器也可以在R5RS或R6RS模式下运行.在球拍模式下运行的有效R5/6RS方案可能会被拒绝,导致运行时错误,或者表现得与应有的不同.话虽如此,它不向后兼容的要点是:
set-cdr!和set-car!,而set-mcar!后者只能在作为可变专门创建对.letrec叫letrec*在R6RS和R5RS,什么R5RS和R6RS通话不存在letrec不存在球拍.( ... )和[ ... ]等效,R5RS没有,但R6RS确实如此.可能还有更多,但在大多数其他部分,球拍是Scheme的超集.
dei*_*nst 35
它包含不可变列表,如上所述.它还包含一个比R6RS记录系统更清洁的结构系统.它有一个面向对象的类和对象系统.它通过合同对设计进行原生支持.它具有让人联想到ML模块系统的单元系统,以及与R6RS模块系统非常相似的模块系统.我确信我已经忘记了我提到过的很多东西.
我不确定重命名是否比营销噱头更有用,但球拍绝对是一种独特的方案方言.
Gau*_*tam 17
Racket包含很多非常好的语言结构,不包括在R6RS方案中,比如"匹配".
soe*_*ard 14
Scheme编程语言的语言规范R5RS基于多个Scheme实现者之间的共识.这意味着语言非常稳定.它还意味着许多有用的功能不属于R5RS标准.
Racket以R5RS为基础并进行了大量扩展.某些扩展定义为宏,但某些功能需要运行时系统的支持.
Racket中的功能无法单独由宏实现:
模块和宏系统比RnRS规范更通用.与#lang读者/语言规范一起使定义语言(使用自定义语法)成为可能,并将其与普通的Racket程序一起使用.
在少数情况下,Racket的构造行为与R5RS不同.最明显的一个是使cons构造成为一个不可变对(mcons构造一个可变对).具有不可变对的一个优点是length现在以O(1)摊销时间运行.