请逐一回复.
如果你解释为什么它不是真的那么试着避免一般性陈述并提供特定的例子.
所有括号都使代码无法读取.大约两周后,使用一个体面的文本编辑器,你只是停止注意它们.
[ETA - 刚刚找到了长期的好人Kenny Tilton的一句话:"圆括号?括号是什么?我从Lisp编程的第一个月起就没有注意到任何括号.我想问一下那些在Lisp中抱怨括号的人是否是被报纸上的文字之间的所有空间所困扰......"
Lisp是一种解释型语言,因此它非常慢.
查看Common Lisp Hyper Spec中的反汇编函数.
一个名为SBCL的 Common Lisp实现为许多平台提供了一个高效的本机编译器后端.
我最喜欢的误解是:它是一种"功能语言",不鼓励迭代或OOP或任何你可以命名的编程风格.
没有什么比真相更遥远.
首先,"Lisp",取决于发言者的意思,除了语言家庭外,根本不是一种语言.这个家族中有几个或多或少知名且广泛的成员:Scheme,Common Lisp,Emacs-Lisp和AutoLisp是传统的; 如今,还有Nu,newLISP(实际上更像是一个"oldLISP"而不是现代的,但无论如何),Arc和Clojure.
Schemers似乎倾向于使用函数式并且不鼓励迭代以支持递归,这当然是正确的.然而,据我所知,Schemers实际上是Lisp世界中的少数,至少在考虑将Lisp用作编程工具而不是研究或研究主题的实际用法时.
我不太了解AutoLisp或Scheme和Common Lisp之外的所有其他Lisp方言,但我所知道的是,Common Lisp绝对不是一种避免命令式甚至面向对象编程的单范式语言.实际上,Common Lisp具有我所知道的最强大的基于类的对象系统,它包含了面向方面编程的功能.
Lisp在我看来实际上是一个语言家族,大多数人鼓励在新的方向上进行实验,并且最容易融入从一开始就不支持的编程范例.这包括命令式编程.Common Lisp甚至还有GOTO!
这是人工智能
我不知道有一个最喜欢的误解......但我常常看到程序员谈论"LISP"以及为什么他们不喜欢它/它不合适/它是学术性的/它永远不会用于项目X.没问题,除非他们说"LISP",他们的意思是"方案",他们的意思是"方案的一个子集",他们真正的意思是"5年前人工智能或语言课程中半个记忆的方案子集他们是不喜欢".
从这个方向来看似乎对Lisp(s)存在相当多的非理性偏见.理性偏见完全是另一回事.
许多人认为lisp是一种面向列表的语言(无论那意味着什么).
即使在lispers中,这也是一个普遍的信念,关于lisp的一个伟大而重要的事情是利弊细胞和可以用它们构建的单链表(sexp's).那些认为不理解使lisp成为比其他主流语言更有成效的语言的真正原因的人(这只是我的主观意见!),并且不明白lisp可能几乎就是它没有了在游戏中完全消耗细胞.
随机选择对于使lisp成为重要的东西,并且在没有sexp的情况下很容易实现:
REPL
编译器在运行时可用
动态打字
句法抽象(宏)
关闭
简单的语法,易于编辑(并由大脑"解析")
一些解释:
简单地说,动态类型意味着不是地方有类型而是运行时值.如果您事先不知道所有要求,那么这是一个重要的帮助,并且随着项目的发展,您的应用程序会不断变换.从我的经验来看,这是迄今为止大多数情况 - 只有在静态打字时才有更多的障碍.
可能很多人会争辩说,利弊细胞和性别对于灵活的宏观系统至关重要.关键是一个简单的语法和一个简单的操作数据结构,它被解析.sexp语法和列表是一个很好的候选者,但还有很多其他的.
我对这些问题感到满意,但我对其他部分不满意,即使用cons'd列表来表示程序代码,因为它有一个重要的缺陷:你不能用随机的东西来注释它而不会干扰数据已经用它代表了.例如,我不能注释这样一个代表程序代码的缺点列表,因为它是两天前由Joe编辑的,而不是将该形式转换为lisp编译器的废话.随着您的DSL变得越来越复杂,这些注释越来越重要,并且随着您的宏变成小编译器将您的DSL编译成lisp.
我最喜欢的lisp误解:CL真的意味着CthuLhu!
笑话放在一边; 到目前为止,关于各种lisp方言的最普遍的误解是,s表达式依赖于括号的语法会损害可读性,而事实上正是这种特性有助于使lisp代码更加简洁,清晰和可读.大多数其他编程语言.
我没有"最喜欢"的误解,因为大多数误解,而不仅仅是关于Lisp,只是烦恼.但我有一个Lisp的误解,真正令我震惊,当我读到Lisp的历史(特别是Lisp的历史和Lisp语言的演变).
众所周知,Lisp是一种缓慢解释的语言,但我实际上它在拥有第一个可操作的解释器后不到一年就有了编译器,而且以下历史记录是针对优化的一长串工作.导致一些Lisp实现击败Fortran数量破碎!
这个神话最可能的来源是,很多人只能从关于Scheme的CS课程中了解Lisp,在那里他们自己编写了一个翻译.可能他们中的许多人都讨厌这个课程,因为它教会了他们关于可计算性或递归的美丽而复杂的概念,然后他们将自己的问题与Lisp的问题同化.