语言是LISP的一种方言是什么意思?

时间:2016-10-10 12:46:26

标签: clojure lisp

有Clojure,Scheme等是LISP的方言,你可以在this SO question on which dialect is the best找到更多。

我的问题非常基本 - 什么是LISP方言? C,C ++,Java,JavaScript,PHP等语言具有相似的语法,但语言不同。人们不会称他们为ALGOL的不同方言。那么为什么人们会称这些方言为LISP?这实际上是什么意思?

2 个答案:

答案 0 :(得分:2)

我建议您从wiki开始,即

  

在Lisp世界中,大多数使用基本S表达式语法和类似Lisp语义的语言都被认为是Lisp方言,尽管它们的变化很大,比如说Racket和Clojure。

我会说Lisp的方言必须订阅最基本的Lisp概念,具体而言,简单的任务应该是容易的,硬任务应该是可能的

这通常意味着语言应该是可扩展的,IOW,它应该增长以满足您的需求。这暗示了的方向,它允许扩展语言语法。反过来,这要求原始语法应该相对简单,IOW,可能是基于Sexp的。

所以,对我来说,Lisp方言的标志是

  • 一个功能强大的宏工具(IOW,完整语言可用于编译时的代码转换)和
  • 一个简单的语法。

PS。请注意,根据一些人的说法,Scheme是Algol的一种方言,所以这不是一个严谨的概念。

答案 1 :(得分:2)

只有一些语法。我们有Algol几乎所有的编程语言,如SQL,Python,Pascal,PHP和JavaScript。有些人可能会说大多数是C或B,他们是正确的,因为这些是第一个用begin取代典型的{。看看你的个人资料,你知道的主要是algol方言,当你学习了最后一个时,它可能很简单,因为你已经从他们的兄弟语言的知识中了解到很多。你没有学过一门新语言,而是你已经知道的一种变体。

Lisp来自50年代后期,它有符号和列表。它的语法不是基于Fortran,那是当时的首选语言。原始论文使用一些原语表达eval。你可以在Paul Grahams excellent essay中读到这个。如果你知道一种方言,就像用algol方言一样容易学习另一种方言。试图通过吸收algol学习lisp方言对我来说非常令人沮丧所以我通过经验知道这一点。

维基百科有一个很棒的programming language tree,你可以浏览。就像在自然语言中一样,你有疯狂的语言,如Finish,而不是在indieuropean语言树上找到的地方。你也有编程语言中的这样的岛屿。 Lisp和Algol是真正不同的世界,即使有几十年来受到影响。

关于它成为lisp方言所需要的答案,它有点朦胧,但我会包含所有具有以下功能之一的语言:

  1. 完全括号的波兰语前缀表示法。 (S表达式)

  2. conscarcdr以及功能为一等公民的符号类型。例如。您可以在方案中创建mapcarmap

  3. 当然,一个不可否认的lisp方言会有这两种方法,但我会考虑每种只有一种语言的语言。

    Sassy是具有更好(lisp)语法的intel程序集。它可以扩展宏并使用Scheme的功能,因此它是一个lisp但它受限制,所以不是所有人都会把它看作是一个lisp方言。

    JavaScript的创建者Brendan Eich原本想制作一个Scheme方言。 JavaScript非常接近成为一个Lisp,但我仍然不认为它是一个lisp,因为它没有我的lisp功能集。如果他们制作了一个单独链接列表作为规范的一部分,我会考虑将其称为Lisp方言,语法非常糟糕。其他人可能将JS作为lisp包含在内。