2016-10-10 71 views
0

有Clojure,Scheme等是LISP的方言,你可以在this SO question on which dialect is the best找到更多。这是什么意思一种语言是LISP的一种方言?

我的问题很基本 - 什么是LISP方言?像C,C++,Java,JavaScript,PHP这样的语言有相似的语法,但是是不同的语言。 Poeple不称他们为ALGOL的不同方言。那么为什么人们称之为LISP的这些方言?这是什么意思?

+0

题外话,因为主要是基于意见。请'重点关注您遇到的实际问题。包括你已经尝试过的内容以及你正在尝试做什么的细节。 “避免主要基于意见的问题,或者可能会产生讨论而不是回答的问题。” –

+0

我听说过马佐夫人,大波兰人等,这是波兰方言。什么是波兰方言?它是波兰文法的一个子集或超集,还是一种非常具体的使用该语言的方式? – molbdnilo

+0

@RainerJoswig同意这不是我遇到的问题,毫无疑问。但不同意的答案将不得不基于意见。如果人们使用* Lisp方言*术语,那么它确实有意义。你可以用同样的方法禁止许多现存的问题。 – ducin

回答

2

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

Lisp进入50年代后期,它有符号和列表。它的语法不是基于Fortran,那是当时选择的语言。原始论文使用几个基元表示eval。你可以在Paul Grahams excellent essay阅读。如果你知道一种方言,就像algol方言一样学习另一种方言也很容易。试图通过同化algol来学习口语方言对我来说非常令人沮丧,所以我通过经验来了解这一点。

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

至于它是一种Lisp方言这是一个有点朦胧,但我将包括具有这些功能一个所有的语言所需要的答案:

  1. 完全括号抛光前缀符号。 (S表达)

  2. cons,car,cdr和一个符号类型的功能是一等公民。例如。你可以创建(在流程mapmapcar

当然不可否认的一个口齿不清的方言本来这两个,但我认为只有一个作为口齿不清以及每一种语言。

Sassy是具有更好(lisp)语法的英特尔汇编。它也许可以扩展宏并使用Scheme的特性,所以它是一个Lisp,但它的限制并不是所有的都会将它看作是一个Lisp方言。

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

2

我建议你先从wiki,它说

在Lisp的世界里,使用基本的S-表达式语法和Lisp的语义被认为是Lisp的方言,但他们大相径庭大多数语言,比如说,Racket和Clojure。

我要说的是,Lisp语言的方言必须订阅最根本的Lisp的想法,具体而言,简单的任务应该很容易,难的任务应该是可能的

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

所以,对我来说,一个Lisp方言的特点是

  • 强大的宏功能(IOW,满语可以在编译时代码转换)和
  • 简单的语法。

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

相关问题