你最喜欢Lisp的误解是什么?

时间:2008-09-24 11:42:54

标签: lisp scheme common-lisp

请以逐一回复

如果你解释为什么不成立,那么尽量避免一般性陈述并提供具体的例子。

17 个答案:

答案 0 :(得分:27)

所有括号都使代码无法读取。大约两个星期后,使用一个体面的文本编辑器,你只是停止注意它们。

[ETA - 刚刚找到了长期的好人Kenny Tilton的一句话:“圆括号?什么括号?我从Lisp编程的第一个月开始就没有注意到任何括号。我想问一下在Lisp中抱怨括号的人如果他们被报纸上的文字之间的所有空间所困扰......“]

答案 1 :(得分:20)

Lisp是一种解释型语言,因此它非常慢。

查看Common Lisp Hyper Spec中的函数disassemble

一个名为SBCL的Common Lisp实现为许多平台提供了一个高效的本机编译器后端。

答案 2 :(得分:20)

我最喜欢的误解:它是一种“功能语言”,不鼓励迭代或OOP或任何你可以命名的编程风格。

没有什么比事实更远了。

首先,“Lisp”,取决于发言者的意思,除了语言家庭外,根本不是一种语言。这个家庭中有几个或多或少知名且广泛的成员:SchemeCommon LispEmacs-LispAutoLisp是传统的成员;如今,还有NunewLISP(实际上更像是一个“oldLISP”,而不是现代的,但无论如何),ArcClojure

Schemers似乎更倾向于使用函数式并且不鼓励迭代以支持递归。但是,据我所知,Schemers实际上是Lisp世界中的少数,至少在考虑将Lisp用作编程工具而不是研究或研究主题的实际用法时。

我对Scheme和Common Lisp旁边的AutoLisp或所有其他Lisp方言了解不多,但我所知道的是,Common Lisp肯定不是一种避免命令式甚至是面向对象编程的单范式语言。实际上,Common Lisp具有我所知道的最强大的基于类的对象系统,它包含了面向方面编程之类的东西。

Lisp在我看来实际上是一个语言家族,大多数人鼓励在新的方向上进行实验,并且最容易融入从一开始就不支持的编程范例。这包括命令式编程。 Common Lisp甚至还有GOTO!

答案 3 :(得分:13)

这是人工智能

答案 4 :(得分:11)

许多人认为lisp是一种面向列表的语言(无论这意味着什么)。

这是一个普遍的信念,即使在lispers中,关于lisp的一个伟大而重要的事情是利弊细胞和可以用它们构建的单链表(sexp's)。那些认为不理解使lisp成为比其他主流语言更富有成效的语言的真正原因的人(这只是我的主观意见!),并且不明白lisp可能几乎就是它没有了在游戏中完全消耗细胞。

随机选择对于使lisp成为重要的东西,并且在没有sexp的情况下很容易实现

  • REPL
  • 运行时可用的编译器
  • dynamic typing
  • 句法抽象(宏)
  • closures
  • 简单的语法,易于编辑(并由大脑“解析”)

一些解释:

简单地说,动态类型意味着不是地方有类型而是运行时值。如果您事先不知道所有要求,那么这是一个重要的帮助,并且随着项目的发展,您的应用程序会不断变换。从我的经验来看,这是迄今为止大多数情况 - 只有当静态打字出现在图片中时才会遇到更多障碍。

可能很多人会争辩说,利弊细胞和性别对于灵活的宏观系统至关重要。关键是一个简单的语法和一个简单的操作数据结构,它被解析。 sexp语法和列表是一个很好的候选者,但还有很多其他的。

我对parens很满意,但我对另一部分不满意,即使用cons'd列表来表示程序代码,因为它有一个重要的缺点:你不能用随机的东西注释它扰乱已经用它表示的数据。例如我不能注释这样一个代表程序代码的缺点列表,因为它是两天前由Joe编辑的,而没有将这种形式转化为lisp编译器的废话。这些注释越来越重要,因为你的DSL变得越来越复杂,并且随着你的宏变成小编译器将你的DSL编译成lisp。

答案 5 :(得分:11)

我不知道有一个最喜欢的误解...但我常常看到程序员谈论“LISP”以及为什么他们不喜欢它/它不合适/它的学术/它永远不会用于项目X.哪个会好的,除非他们说“LISP”,他们的意思是“方案”,他们的意思是“方案的一个子集”,他们的真正意思是“人工智能或语言课程5年的一半记忆方案”以前,他们不喜欢“。

从这个方向来看似乎对Lisp(s)存在相当多的非理性偏见。理性偏见完全是另一回事。

答案 6 :(得分:8)

我最喜欢的lisp误解:CL真的意味着CthuLhu!

除了笑话;到目前为止,关于各种lisp方言的最普遍的误解是,s表达式语法依赖括号伤害可读性,实际上这是帮助的特性使lisp代码比大多数其他编程语言更简洁,清晰和可读。

答案 7 :(得分:6)

我没有“最喜欢”的误解,因为大多数误解,而不仅仅是关于Lisp,只是烦恼。但是当我读到Lisp的历史时(特别是History of LispThe Evolution of Lisp),我对Lisp的误解让我感到非常震惊。

众所周知,Lisp是一种缓慢解释的语言,但实际上它有一个编译器,在我第一次使用它的第一个工作解释器后不到一年,我想,以及以下历史是一系列针对优化的工作,导致一些Lisp实现在数字破坏时击败Fortran

这个神话最可能的来源是,很多人只能从关于Scheme的CS课程中了解Lisp,在那里他们自己写了一个翻译。可能他们中的许多人都讨厌这门课程,因为它教会了他们关于可计算性或递归的美丽但复杂的概念,然后他们将他们的问题与Lisp的问题同化。

答案 8 :(得分:4)

“宇宙是用Lisp编写的”。但是apparently it's not

答案 9 :(得分:4)

Lisp中的所有内容都是一个列表,没有其他有效的复杂数据结构。

不正确。在Common Lisp中有类,结构,哈希表,多维数组,可变字符串等。其中每一个都是有效实现的。例如,SBCL编译器为阵列访问发出优化的内联本机代码。

答案 10 :(得分:3)

Lisp无法提供独立的可执行文件。

使用SBCL,您可以通过简单的function调用将lisp VM的当前状态保存到单个可执行文件中。 当您启动此可执行文件时,它将从原始状态开始并调用保存时提供的函数或lambda。

答案 11 :(得分:3)

它是一种编程语言。今天,Lisp是一系列编程语言,包括Common LispScheme,它们是各自具有各种实现的标准,还有ClojureArcmany others。< / p>

答案 12 :(得分:3)

Lisp没有IDE,因此您必须使用记事本并连续计算所有多余的括号。

事实上,有不少。对于Common Lisp,最好在windows和linux下使用带有SLIME的Emacs。它提供了一个监听器(用于评估),一个Inspector(用于监视结果),一个Debugger(带有步进),一个高度可定制的编辑器(毕竟这是Emacs)。 SLIME支持10种不同的实现。

答案 13 :(得分:1)

“CLOS”是一种编程语言,,Lisp是一种解释的,仅限功能的语言。真的,我从CS教授那里听说过。我认为这些编程语言概念书中有一些误导性的图表表明了这一点。

今天的高校CS教师(特别是年轻人)接受过Java,C和C ++教育,他们可能在“编程语言比较研究”或“编程范式”课程中学习了Scheme或Common Lisp。 ,这可能是由不喜欢任何Lisp语言的人教授的,并教他们关于函数,列表,符号和高阶函数。期。 然后他们最终教导他们学到了什么:

  • Lisp是一种编程语言
  • 解释Lisp
  • Lisp很慢
  • Lisp是一种AI语言(我最后一次查看Robert Sebesta的书,它仍然声称 - 但是有一个新版本,所以他可能已经解决了这个问题)
  • Lisp没有OO支持(!!!)
  • Lisp是一种函数式语言(与最低限度支持任何其他范式相反)
  • 在Lisp中没有数据类型
  • 除了列表之外,Lisp没有数据结构(因此对数字运算没有用)
  • “Lisp不再使用,仅用于本课程,因为它是最重要的功能语言”

我甚至看到一位非常聪明的教授在Common Lisp中给出一个矩阵乘法的例子 - 当然,将矩阵表示为列表!

答案 14 :(得分:1)

因为人们使用Lisp解决难题,语言本身一定很难。

Recursion is hardFixed points of functions are hard。但它们几乎不涉及Structure and Interpretation of Computer Programs的第1章。那不是因为Scheme很难 - 实际上是因为它太容易了,所以剩下要做的就是硬盘!

答案 15 :(得分:-2)

人们将lisp归咎于括号。我希望他们说明如何在没有它们的情况下实现面向列表数组的语言......

答案 16 :(得分:-5)

任何足够先进的应用程序都与线路噪音无法区分。