今天突然想到这个问题,于是去翻自己的dailies,发现最早的一篇带Lisp字样的文章是2022年的。
星期日,2022年2月27日
22:11 LISP
在 bilibili 上浪费了一天。
关于 LISP 的翻译工作,我可能需要一整个下午或两个晚上,甚至更长时间才能完成一章,所以我尽量每周做两次。这应该用时间表而不是截止日期来安排。然而,我讨厌时间表。因为我已经试过了。
我自2020年下半年开始投入翻译Partrick Winston所著的LISP一书,而且这么做的理由很荒诞——因为我在叮咚鸡时期陷入了空前的迷茫,当时就想找一件很费时的事情,来检验自己是否可以做完一件很费时的事情。这个工作最后花了我两年半的时间。至于这个书是什么情况,这个是MIT在80年代用的本科生教材,但好像他们只讲前几章,而精华部分是后面几章,属于选修内容。此外就是这个书里用的是MACLisp,是Elisp的父辈,学了受增益最大的可能就是Elisp,所以我日后逐渐沉迷Emacs了。
在这两年半里面我完全没有学习过怎么用Lisp编程,也就是在最后半年里粗浅的学了一下Scheme,但很快就又从Scheme转Haskell了(那是另一个同样很荒诞的故事)。虽然我当时已经在用Emacs了,但实际上我对什么是Lisp一直没啥概念,我真正开始学Lisp应该从去年我用Common Lisp刷L99那套题开始算。但是直到刷完了我才发现这套题用处不大,跟本科生的数据结构作业有的一拼。也就是说,虽然我现在能使用一点Common Lisp了,但实际上我仍然从来没有开始正式学习Common Lisp。
所以,在这之前,我是怎么接触Lisp的呢?完全想不起来了。我可以回忆起来的一件事是,我想要发明一门可以用来抽象表示各种字符串的宏语言(我想学习过C宏的人都会有这种想法吧?)。但是当时我应该不懂什么叫做函数式编程,因为我连FQ都不会,虽然我当时应该学过递归函数了,但那个是数学书里面学的,这种思想很难用到C语言编程里(当时我也不是很懂C,只是能用来解题的程度)。
当时刚开始用Linux,因为Windows下的Emacs怎么都用不爽,所以直接把Windows格式化了。当时也不会写Elisp,只会点点customize options,学会配置包还是在知乎上跟人学的。那么这个漫长的空窗期我在干嘛呢?答案是折腾dotfiles,懂得都懂。小朋友们,如果你发现一个文件前面有个点,就是告诉你应该忽略它的意思。不要染上折腾dotfiles的恶习,否则就会变得像我一样不学无术,整天胡言乱语了。
也许是为了找到那个完美的宏语言?也许是为了把Emacs玩明白?也许是为了去读TeX的源码?反正现在我是把最初的目的忘的一干二净了,这些事情对我来说也完全不重要了,真是稀里糊涂的人生啊。
10 个赞
8bit
2
读计算机专业之前,完全没接触过编程的我想要自学一些,被信竞的朋友安利了Racket
所以是从一开始就误入歧途
4 个赞
为了配置emacs,编写符合自己需求的处理org-mode相关的代码。
不过现在有了ai,写出来的elisp代码片段好了不少,虽然AI会产生幻觉编一些函数,但AI也总能发掘出很多我听都没听说过、但确实存在于emacs中的函数和变量。
2 个赞
和你一样,「想要发明一门可以用来抽象表示各种字符串的宏语言。」
1 个赞
读 Rust 文档, 读到 macro 那一章, 它说这个是学的 Lisp. 知乎上有人说 Rust macro 很难懂.
我觉得如果我先学会 Lisp, 回来再读这一章肯定更轻松.
遂学 Common Lisp, 遂用上了 Portacle (Common Lisp IDE: 定制版 Emacs), 遂接触 Emacs.
不过后来也没契机再去学 Rust 了
3 个赞
羡慕你有这样的朋友,我当时被推荐的是Linux而且发现我完全误解了推荐者的意思 
1 个赞
vibe coding反而感觉Lisp是ai的累赘
玩Emacs玩的。另外,会用这种远古变态丑的小众函数式语言写程序真的很酷!
2 个赞
第一次知道 Lisp 是因为《算法竞赛入门经典(第2版)》(刘汝佳 编著)。看了这本书,算法倒是没学会太多,(我也不打算法竞赛),神奇的知识倒是学了不少
初见端倪——“学习目标:初步了解函数式编程与 LISP”
在例题 12-36 疯狂的谜题(Killer Puzzle)中,刘汝佳定义了一种 Lisp 方言以描述“谜题”中包含的限制条件,要求实现一个 Lisp 解析/求值器,判断穷举的答案是否满足每一项限制条件,最终求得谜题的解。完整题目很长:UVa #12666 - Killer Puzzle - https://onlinejudge.org/external/126/12666.pdf
我当时看不懂这道题目,不过我看懂了下方的注,知道了 Common Lisp,一直都想学一学。第一次尝试在 Windows,搜到了 LispStick(远古软件,现在已经搜不到了),坚持了几天,没能学下去;第二次尝试在 GNU/Linux,改学 Clojure,在 Leiningen REPL 里面转了几天,又没能学下去。
终于,在25年的夏天,我正式学习了 CL,过了一遍 ANSI Common Lisp 基本语法。成功的原因之一是
学校给安排的实习项目无聊至极,之二是
在 Emacs 拿 SLY 学 CL 体验简直无与伦比,之三是
在doom-themes找到并换上了一个好看的主题。
下一步计划,读 Practical Common Lisp,巩固巩固基础,试图写一些有趣、实在的东西,祝我自己好运吧!
Edit:改变计划,读 SICP(已经开始了,才读到1.2,不过有种强烈的“相见恨晚”的感觉)
2 个赞
非常喜欢SICP这本书,里面通过LISP介绍算法,一边看书,一边敲了很多例子,做习题;
不敢说LISP入门,对括号很亲切而已。
书全名是:
Structure and Interpretation of Computer Programs
4 个赞
我用ai的地方主要在总结归纳现有文档、写八股文、写elisp片段等地
如何染上Lisp的呢?
大概是16年17年左右接触编程,彼时python鼓噪热闹,鱼龙混杂良莠不齐。
比如说list(array)列表或者map映射,各路大神争相炫技的是,精通多深的底层原理。比如array是如何实现的,map是如何构造的,越底层越高尚。
初学者障碍重重。
后来读了SICP,才恍然,编程不过是你做事和思考方式的另外一种表达而已。
你手下的底层员工更多关注实现和执行层面,而你更多思考的是命令(高层的抽象)。
对各路编程大神遂不屑一顾。
1 个赞
看来我有必要重新读一遍sicp了。
我对这书的印象是它就像代数教材里面artin的algebra,上不去下不来的感觉。
1 个赞
当曾经很符合我审美的 Scala 2 为了所谓的可读性变成 Scala 3 那种人不人鬼不鬼的语法以及提的建议被当耳旁风后,使得我选择不再相信任何一个编程语言的开发团队。而 Common Lisp 的好处是他早已标准化,从此不会有任何一个人或者组织就能够左右他的发展,扩展和功能完全由社区主导,任何人都把他定制成自己想要的样子,以自己喜欢的范式编写代码,是真正自由和包容的语言。
shynur
19
没懂, 但是这些个东西不是常识吗? (哪怕对大一学生来说)
shynur
20
确实不懂为什么 Python 会火.
一个局部作用域都没有的编程语言, 极易写出 bug 代码.
又不像 TypeScript 那样强类型, 别说别人的代码了自己的看了也懵b.
另外喜欢我游标卡尺吗?