诺维格大师曾经说过:
Scheme 的美妙之处在于,完整的语言只需要 5 个关键字和 8 个句法形式。相比之下,Python 有 33 个关键字和 110 种句法形式,而 Java 有 50 个关键字和 133 种句法形式。所有这些括号可能看起来很吓人,但 Scheme 语法具有简单性和一致性的优点。(有些人开玩笑说“Lisp”代表“很多令人讨厌的愚蠢括号”;我认为它代表“Lisp 在语法上是纯粹的”。)
那么 Haskell 是如何比较的呢?
对于 Haskell 98,可能与 Python 或 Java 大致相同的数量级。
很难准确确定什么构成“句法形式”。例如,Java 计数可能取自表达式级别及以上(即“标识符”为原子的级别)的扩展 BNF 规则的数量,如Java SE 语法页面所示,其中大约列出了120个左右。这似乎也与Scheme 上的这个页面一致,我数了一下大约有 14 个,忽略了似乎完全与标识符和文字的词法结构有关的规则。我们在这里使用近似值,其中 8 和 14 应被视为相等。
因此,按照这个指标,我从 Haskell 98 报告第 9.5 节上下文无关语法(似乎与 Java 参考大致处于相同的抽象级别)中得到的快速而肮脏的计数是 76。同样,我们在这里使用近似值其中 76、110 和 133 都应该被视为相等,因此 Haskell == Python == Java。
还可以肯定地说,根据评论,GHC 特定语法(编译指示、原语和许多扩展)很容易使该计数增加一倍或三倍。
话虽这么说,我不确定这个指标有多有用。我并不反对“Scheme 是一种美丽的语言”这一说法,但我认为“Scheme 是一种美丽的语言是因为(或主要是因为)它具有少量关键字和句法形式”这一说法充其量只是一种过分的过度简单化。