为什么lisp,或者说common lisp现在这么冷门呢?

现在流行的纯函数式,线性逻辑,类型推导,完全超出了编译原理这书涵盖的范围。再看编译原理都过时了。

要说生态,抄几个库的事。Python 靠链接 C 能搞 Machine learning,然而到了 theorem prover,高性能计算这种层次,玩不出什么花头。

2 个赞

数据结构 与 算法 总不过时吧

传统的数据结构不能直接在纯函数式中用,现在都研究 immutable

如果不是单纯研究,为了生活,学语言看爹太重要了。有点世俗了

Lisp 这个概念如今是 ill-defined 的,所以只说 Common Lisp。

因为 Common Lisp 比较烂啊。你深入学一学就发现,这语言充满了历史遗迹(本来就是早期多种 Lisp 的综合),语言设计颇为诡异。(昨天还有人说 CLIM 就是 API 设计的反面教材。)

初学可能感觉挺轻松容易的,再学下去就觉得一点也不值了。

  • CL 有什么其他语言做不到的?
  • 有什么其他语言没有的 feature?
  • 写起来代码会比其他语言短吗?
  • 程序运行得比其他语言快吗?
  • 第三方生态足够好吗?
  • ANSI Common Lisp 够用吗?

以上这些问题的答案全部是“否”。而且 CL 是从上个世纪(字面意义上的)如日中天的情况发展到如今的地步,真的就没有 CL 自己设计上的问题吗?自己掂量掂量吧……当然,自己玩得开心最重要。我也是学过 CL 之后变成 Lisp 黑的。 233

PS:早期的 Lisp 本身只是 lambda calculus 的一种计算机表示方法,我觉得没必要过于纠结形式上是如何表征的。单从学习的角度来说,Haskell/ML 之流岂不是更有学习的价值?想用一门更 modern 的语言干活的话,不妨看看 Rust、Scala 之类的语言。

3 个赞

保守估计,主流语言至少要学五种才能涵盖所有 CL 的特性,反过来,没有什么语言的特性 CL 是做不到的。

编译时就是运行时,运行时也能使用编译器。

高度可扩展的 parser 和 printer。

还有个 trivial 但是别的语言的确没有的功能,multiple-return-value

比绝大多数语言短

和最快的语言在同一梯队

从 Racket, Haskell, Python, Java, Ruby 抄个库信手拈來,对于 Java, C, C++ 都可以调用。

One of the common complaints about Lisp that there are no libraries in the ecosystem. As you see, 5 libraries are used just in this example for such things as encoding, compression, getting Unix time, and socket connections.

你觉得只有一个 ANSI C Std Lib 够用吗。

有一个语言标准并不代表语言实现者不会加扩展。

这样讲吧,John McCarthy 的 Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) 除了用了个 lambda 的字面符号,完全没有讲过 lambda calculus。LISP 的核心是符号处理语言,而不是什么 lambda calculus 的模型。正式把 Lisp 和 lambda calculus 联系起来的是 Scheme,which is, however another language.

Haskell 有很多非常优秀的想法,但是了解更多计算机历史以后,必然会得出“一个没有副作用的语言是残缺的语言”这样的想法,Monad IO 是相当丑陋但不可缺少的一部分,以至于我认为整个设计是没救了的。

Rust 在 Haskell 群体看来,设计是相当孱弱的,也就能骗骗只会写 C++ 的土包子。liner logic 也是 Guy Steel 玩过的东西(NIL project),连微创新都算不上。

Scala 学了函数式的皮毛,语法灵活了,然后实际上犯了和 LISP,C, C++ 犯的一样的大错:Everything is an expression。

你要是怀疑什么给了我这样大的勇气在 2018 年吹 Lisp,我希望你能在学习 ACL2 以后好好考虑一下,说不定可以改变你对 Lisp 和函数式的看法。反正你也要学 ML 这种没有用的东西(Ocaml 是例外)。 说实话 ML 和 Lisp 还是太接近了,没有 Haskell 那样特色鲜明。

9 个赞

找工作难,没新人愿意学,导致企业更难找到人,导致工作更少,恶性循环。

说白了还是不够“时尚”,要包装,要搞出名气,最好有个杀手锏的应用,名气可以飞速提升。 所以小白能知晓得的应用哪些是Lisp写成的呢? 思来想去最出名的也就是 Emacs 了。

你大概不怎么写英文不知道,油管的广告中出镜率很高的 Grammarly 就是用 Common Lisp 写的。

https://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html

3 个赞

知道吧,这个fact应该在坛里被提了好几次了。然而能说得出口的也就一个grammarly :sweat:


感觉这个帖子还是没多大意义,坛里其他人的pl知识比你少多了……

1 个赞

换个角度想想,比那一大堆听都没听过的语言热门多了....

2 个赞

你用哪种Common Lisp实现?

SBCL 吗?

我系统上能安装的只有sbcl 和 clisp 我该如何选择呢?

还望赐教!

Linux 的话 SBCL 最流行,一般配合 Emacs 的 Sly ( SLIME 维护者自己做的 fork,有更多功能)使用。性能最好但是内存占用比较夸张。

CLISP 现在很少用。

我用的是 Clozure CL,编译速度很快,而且内存占用很小。

最好不要用系统自己的包管理器,推荐用 roswell,一站到位。因为对于纯初学者来讲安装 Quicklisp 包管理器是个不小的挑战。

6 个赞

编译的时候出了点问题 难道只能用make-3.8才能编译的过吗?

出问题的文件是 memorize-raw.lisp 的第192行

顺便说一下 sly 挺好用的

有company 还有sly-edit(相当于 C-h f)

从 quicklisp 下载数据看, sbcl 占据绝对优势,个人觉得会比较适合上手,数据:

sly 的作者感觉挺厉害的,好多厉害的项目都是他在维护或者开发

你用的是 master branch 吗?切到 release branch 试试。

指环王的特效,任天堂的很多游戏的建模,都是在 Symbolics Lisp Machine 上完成的。

应用基本上都是 Classical AI, 数学,艺术,工业系统。

release还是同样的错误

用clisp 也会出错 但出错的文件不一样

acl2不编译的话 能用吗? 慢一点没关系。

我应该先看看sbcl 再尝试编译acl2

Common Lisp 有流行过吗?表示怀疑。

情况比Scheme好吧,一大堆人讨论Common Lisp,r7rs一直憋不出来,还老被Racket抢话题。

我个人一直想写Scheme,不过没机会。。。现在我r6rs基本忘光了,只记得点r5rs。。。