有没有好的Scheme语法替代方案?

6
我认为,Scheme(也许还有Lisp)可以通过使用不同的语法使其更加“用户友好”。例如,可以设计一种更接近某些常用语言(如类似Java但无需定义类)的语法,而不是带有丑陋括号的嵌套S表达式。
如果更冗长并不一定是坏事。例如,语法可能需要在许多人期望的位置使用换行符和逗号,并期望显式返回语句。此外,似乎并不难允许某些运算符以中缀样式使用(只需遵守通常接受的运算符偏好规则)。
如果不会使事情变得太混乱,那么语法甚至可以向后兼容,以便在任何需要表达式的地方,都可以使用普通的括号内S表达式。
你对此有什么看法和想法?是否存在类似的东西?(我想肯定有,但“Scheme”是一个毫无价值的谷歌搜索词,我找不到任何东西!)

专业提示:谷歌搜索“Scheme语言” :) - leppie
10
不,我认为没有人想要这个。 - Rafe Kettler
5
我提出一种替代JavaScript语法,用优雅的S表达式取代丑陋的C风格代码。 - erjiang
6个回答

9

最初,Lisp计划使用一种称为M-Expressions的语法,S-Expressions只是更容易构建编译器的过渡性解决方案。当M-Expressions准备好被引入时,已经接受Lisp的程序员仍然坚持他们已经习惯的方式,因此M-Expressions从未流行起来。

在Guile中有一种中缀表示法,但很少使用。优秀的Lisp程序员甚至不再看到括号,前缀表示法确实有其优点...


3
完全同意看不到括号的问题。关键是使用带Lisp模式的编辑器,这样你就能看到缩进了,而括号只是手段,缩进才是最终目的。Racket(前身为PLT Scheme)也有一些中缀:(a.f.b)==>(f a b)。有时候你会看到它用于合同:(in.->.out)而不是(-> in out)。但不总是这样,也不用于其他太多事情。因为前缀有其优点。 - Greg Hendershott

8

7
请看一下“sweet-expressions”,它提供了一组额外的缩写方式,用于传统的s表达式。它们增加了语法相关的缩进、一种中缀表示方法和传统的函数调用方式,如f(x)。与过去几乎所有使Lisps可读的努力不同,sweet-expressions是向后兼容的(您可以自由混合格式良好的s表达式和sweet-expressions),通用的和同构的。
sweet-expressions是在http://readable.sourceforge.net上开发的,并有一个示例实现。
对于Scheme,有一个针对sweet-expresssions的SRFI:http://srfi.schemers.org/srfi-110/

1
除了糖果表达式本身之外,http://srfi.schemers.org/srfi-110/srfi-110.html#comparisons 还调查了许多替代性的工作。 - Beni Cherniavsky-Paskin

3

试试SRFI 49。 :-P

(不过,正经点说,像 Rafe 评论的那样,“我想没有人想要这个”。)


2
有些人认为Python是一种带有操作符中缀表示法,函数代数表示法以及使用更类似于Java的语法来表示语言的Scheme。我不同意这种评估,但我可以理解这个想法的来源。
改变Scheme的符号表示法的一个大问题是编写宏变得非常困难(如果想了解有多困难,请看Nimrod语言或Boo)。您必须首先解析输入语言,而不是直接使用代码列表进行工作。这通常涉及从输入的语言构造语言的AST(抽象语法树)。与Scheme直接使用时,这是不必要的。
但是,您可以查看Gambit Scheme中的SIX表达式语法。这里有一组很好的幻灯片,其中包含讨论:http://www.iro.umontreal.ca/~gambit/Gambit-inside-out.pdf 但不要告诉任何人! (内部玩笑是有人建议每天写一个没有括号且带有中缀表示法的Lisp,有人会在一个月内发布实现版本。)

人们认为Python是一种Scheme语言,因为它是一种具有一流函数和单一命名空间(“Lisp-1”)的小型语言 - 但没有宏。 - Beni Cherniavsky-Paskin

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接