Arc over Racket的优势

时间:2011-12-18 22:42:26

标签: lisp racket arc-lisp

Arc建立在Racket之上。既然他们都在Lisp家族,我很好奇Arc over Racket的优势,或者鉴于Racket可用,创建Arc的动机是什么?

2 个答案:

答案 0 :(得分:24)

在某种意义上,编写自己的语言赋予权力:您可以选择使用该语言编写哪些基元,什么类型的表达式。从这个意义上讲,你可以看一下像On Lisp这样的书,看看Arc的核心作者对于他们喜欢某种语言的东西有强烈的看法。

如果我把你的问题归结为基本要素,听起来像这样:人们为什么要编写特定领域的语言?

(这是一个单独的问题,考虑Arc人员是否应该重新实现如此多的原始设施,例如他们自己的宏和模块系统,当Racket内置了这样的机制时。但Arc的作者完全在他们的内部重新发明的权利。)

我想我对Arc的一个反对意见是:他们实现官方运行时的方式使他们很难将他们所做的工作重新用于普通的Racket。从这个意义上说,它的努力只能帮助一个社区,而能够轻松地从Arc人员的工作中获益将是一件好事。

答案 1 :(得分: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)

您可以选择一个而不是另一个。我个人喜欢Arc语法,但不是它作为解释器实现的事实。我希望他们已经将Arc实现为Racket模块语言,从那时起你就可以开发drracket,调试和制作可执行文件。这甚至可能允许在Arc中制作Racket库,反之亦然。

如果您想制作兼容的代码,您应该更严格并使用R6RS / R5RS,而不是使用球拍默认语言或弧线,因为您可能拥有的代码不仅可以在球拍上运行。在球拍中,您可以选择R5RS或使用#!R6RS作为代码中的第一行来强制标准。在这两种情况下,结果都可以在其他实现/编译器下运行。