dyo*_*yoo 24
编写您自己的语言,从某种意义上说,赋权:你选择什么样的原语,什么样的表情,非常方便使用该语言编写.从这个意义上讲,你可以看一本像On Lisp这样的书,看看Arc的核心作者对于他们喜欢用语言表达什么样的东西有很强的见解.
如果我把你的问题归结为基本要素,它听起来像这样:人们为什么要编写特定领域的语言?
(这是一个单独的问题,要考虑Arc人员是否应该重新实现如此多的原始设施,例如他们自己的宏和模块系统,当Racket已经建立了这样的机制.但Arc作者完全有权重新获得-发明.)
我想我对Arc的一个反对意见是:他们实现官方运行时的方式使他们很难将他们所做的工作重新用于普通的Racket.在这个意义上,它的努力,帮助仅仅是一个社区,而这本来是很高兴能够轻松地从弧乡亲的工作中受益.
小智 17
Racket是Scheme方言而Arc不是.它们都是LISP方言.Arc减少了括号的数量,并且具有一些内置的语法,可以使代码大小更短.例子:
;; scheme
(if p1 c1
(if p2 c2
(if p3 c3 a3)))
;; arc simplifies if
(if p1 c1
p2 c2
p3 c3
a3)
;; scheme
(f1(f2(f3 a b)))
;; arc simplifies cascading calls
(f1:f2:f3 a b)
;; scheme
(lambda (x) (+ x x))
;; arc simplified one argument anonymous functions
[+ _ _ ]
;; scheme array access
(vector-ref v1 5)
;; arc simplifies array access
(v1 5)
Run Code Online (Sandbox Code Playgroud)
你可以选择一个而不是另一个.我个人喜欢Arc语法,但不是它作为解释器实现的事实.我希望他们已经将Arc实现为Racket模块语言,从那时起你就可以开发drracket,调试和制作可执行文件.这甚至可能允许在Arc中制作Racket库,反之亦然.
如果您想制作兼容的代码,那么您应该更严格并使用R6RS/R5RS,而不是使用racket默认语言或弧形,因为您可能拥有的代码不仅可以在球拍上运行.在球拍中,您可以选择R5RS或使用#!R6RS作为代码中的第一行来强制标准.在这两种情况下,结果都可以在其他实现/编译器下运行.