Haskell是Lisp吗?

Bob*_*son 29 lisp haskell language-comparisons

我一直在阅读Doets和Eijck撰写的《 Haskell逻辑,数学和编程之路》(2004)。这似乎是一本受人尊敬的书,但是当我声称Haskell是Lisp家族的一员时,我感到震惊。这个准确吗?我将用S表达式,不纯函数和列表作为Lisps的特征,并将其作为唯一的复合数据结构。Haskell没有任何东西。该主张有什么理由?

Rai*_*wig 41

Lisp是一个非常模糊的概念。我看到两种或多或少有用的解释:

  1. Lisp是一门具有共同思想的语言家族。在广泛的解释中,这个家族有非常不同的语言:Common Lisp,Scheme,Logo,Dylan,Emacs Lisp,Clojure,RLisp,3Lisp以及许多其他语言。

  2. Lisp作为以某种方式实现核心语言(CAR,CDR,CONS,LAMBDA,PROG,SET,SETQ,QUATTE,DEFUN,IF,COND,DO等)的语言谱系:Lisp 1.5,MacLisp,Lisp Machine Lisp,Emacs Lisp,Common Lisp,ISLisp。请注意,这些语言通常将“ Lisp”作为其名称的一部分。

我们在Lisp方言中发现一些典型的事物:严格评估,副作用,直接命令式编程,函数式编程构造,s表达式,评估,宏。

Haskell是一种非常不同的语言:非严格评估,不基于s表达式的语法,静态类型,纯功能。

Haskell不适合1或2。因此,我想说Haskell不是Lisp。

类似地,我们可以说函数式编程语言是:

  1. 支持函数式编程的语言:Lisp,APL,...,ML,SML,OCAML,F#,Miranda,Haskell,...

  2. 强制执行功能性编程的语言。Lisp在这里已经不适合使用,因为命令式甚至面向对象的编程在Lisp中并不是第二类。

  3. 强制执行纯函数式编程的语言。在这里,我们以Haskell为例。作为一种相对较新的Lisp方言,Clojure也可能适用。

通常,Lisp仅支持而不执行功能编程。因此,它是一种功能性编程语言,具有更广泛的解释。

Haskell是被视为纯功能编程语言的语言之一。

  • 是的,除了语法之外,JavaScript可能比Haskell更像Lisp。(最初被认为是Scheme实施...) (10认同)
  • @Kevin Cantu:这不是偶然的。布伦丹·艾希(Brendan Eich)在他的网站上提到Netscape雇用了他,并承诺将在浏览器中实施Scheme。;-) (7认同)
  • @hvr:这是因为“同质性”是一个令人困惑的术语,在Lisp的世界中很少使用。在那里,我们讨论使用符号表达式的计算(请参阅McCarthy关于Lisp的原始论文)。有时我们谈论“代码即数据”。 (4认同)

WRe*_*ach 18

我认为将Haskell视为LISP家族的一员很困难,但我怀疑推理是这样的……

在对编程语言进行分类时,将它们分为两组是有意义的:从FORTRAN派生的那些和非FORTRAN派生的。1958年,“非FORTRAN小组”几乎意味着LISP(至少在今天不存在的语言中)。因此,一段时间以来,编程语言家族树有两个主要分支:FORTRAN子代和LISP子代。如果只有这两个选择,那么我将把Haskell放入LISP分支中。

但是,许多评论员认为ML,Prolog和APL之类的语言是“突如其来”的-引入了足够不同的范式来给自己赋予血统。Haskell显然类似于ML。

作为此类分类的示例,请参见以下编程语言家族树:

奥莱利的编程语言海报

在levenez.com的计算机语言时间表

HOPL:交互式编程语言花名册(Haskell条目)


mnu*_*zzo 9

我不同意这一点。它们都是函数式编程语言,并且Lisp影响了Haskell,但是Haskell并不是Lisp的派生产品。只要看一下括号的数量就可以知道。

  • 比语法更重要的是类型系统! (5认同)