有没有好的替代Scheme语法?

时间:2011-01-05 17:43:31

标签: syntax scheme

我认为使用不同的语法可以使Scheme(也许是Lisp)更加“用户友好”。例如,代替具有丑陋括号的嵌套S表达式,可以将某种语法设计为更接近一些更广泛使用的语言(例如类似Java而不需要定义类)。

如果它更冗长,那不一定是坏事。例如,语法可能需要在许多人期望它们的地方使用行分隔符和逗号,并期望显式返回语句。此外,允许某些运算符使用中缀样式似乎并不困难(只需遵守普遍接受的运算符首选项规则)。

如果它不会使事情变得太乱,语法甚至可以向后兼容,因此在任何需要表达式的地方,可以使用括号之间的正常S表达式。

您对此有何看法和想法?这样的事情是否存在? (我希望它确实如此,但“Scheme”是一个毫无价值的谷歌术语,我找不到任何东西!)

6 个答案:

答案 0 :(得分:7)

我认为“甜蜜的表达”可能是摆脱Lisp中括号的更为深思熟虑的方法之一。它显然甚至支持宏。

http://www.dwheeler.com/readable/sweet-expressions.html

但是,我认为大多数人最终会克服括号或使用其他语言。

答案 1 :(得分:7)

最初,Lisp计划使用一种称为M-Expressions的语法,S-Expressions只是一种过渡解决方案,可以更轻松地构建编译器。当M-Expressions准备好被介绍时,那些已经接受过Lisp的程序员只能继续使用他们习以为常的东西,并且M-Expressions从未流行过。

Guile有一个中缀符号,但它很少使用。一个好的Lisp程序员甚至不再看到parens了,前缀表示法确实有它的优点......

答案 2 :(得分:6)

看一下“sweet-expressions”,它为传统的s表达式提供了一组额外的缩写。它们添加了语法相关的缩进,一种做中缀的方法,以及像f(x)这样的传统函数调用。与过去几乎所有使Lisps可读的努力不同,sweet-expression是向后兼容的(你可以自由地混合格式良好的s表达式和sweet-expression),泛型和homoiconic。

Sweet {表达式是在http://readable.sourceforge.net上开发的,并且有一个示例实现。

对于Scheme,有一个关于甜蜜表达的SRFI:http://srfi.schemers.org/srfi-110/

答案 3 :(得分:3)

请尝试SRFI 49尺寸。 :-P

(严肃地说,正如Rafe评论的那样,“我认为没有人想要这个”。)

答案 4 :(得分:2)

有些人认为Python是一种带有运算符的中缀符号的Scheme,函数的代数符号,以及使用更“类似Java”的语法来表示语言。我不同意这种评估,但我可以看出这个想法的来源。

更改Scheme的符号的一个大问题是宏变得非常难以编写(看看有多难,看看Nimrod语言或Boo)。您不必直接使用代码作为列表,而是必须首先解析输入语言。这通常涉及从输入构造语言的AST(抽象语法树)。直接使用Scheme时,这是不必要的。

但是,您可以在Gambit Scheme中查看SIX表达式语法。这里有一套很好的幻灯片,其中包含对此的讨论:

http://www.iro.umontreal.ca/~gambit/Gambit-inside-out.pdf

但不要告诉任何人这件事! (内心的笑话是有人建议写一个没有括号的Lisp和每天一次的中缀表示法,有人每月宣布一次实施。)

答案 5 :(得分:1)

有些语言可以做到这一点。例如:Dylan