为什么Common Lisp 现在这么寒冷?🥶《第二季》

以前多少会有点奇怪,为什么在我的感受中觉得那么灵活好用的Common Lisp 用户量那么少?

是不是暗示着其实“好用”但并不实用,《黑客与画家》提到的成功案例是非常罕见的,就像乔布斯,达芬奇是很难被复制的

昨天才刚接触到 set-macro-character,更深切感受到了!我认真投入了几个月了(当然,也很享受,觉得时间被打折了一样一下子一天就没了),觉得还只是在浅水池状态

这高深莫测的深度和难度能排除掉大部分人,如果没有兴趣的支撑,是很难潜得那么深的!而且现在国内基本没有哪个职位能让这个“学以致用”!

就像是一场赌博,你能赢的概率不高,但是如果赢了,会给你超乎预期的赔率!

《Practical Common Lisp 》第一章也提到了,他也是要用一本书来证明这论点,但好像也不是很成效~ 用户还是少得有点可怜🥺

我现在要亲自动手来做这道证明题啦! 🦾

1 个赞

现在越来越觉得,一个东西的流行,运气和时机的作用,远大于其本身特质的作用。

没读过《Practical Common Lisp 》,

求分享下读书笔记, 或者读完之后总结的精髓(最好一百个字以内)

有人好像说过, lisp太灵活了, 导致 lisp 程序员数量不多,而且协调难度大,因为一言不合就可以单枪匹马的干,一盘散沙

协调难度大这点很多语言都这样,但不妨碍其中某些流行。

确实有这感觉,像我也想创建自己的 style 来写,例如刚用学到的知识写了个宏:

(defun char-digit-p (c &aux (int (char-int c)))
  (and (>= int (char-int #\0)) (<= int (char-int #\9))))

(defun symbol-int (symb)
  (let* ((str (write-to-string symb))
         (from (position-if #'char-digit-p str))
         (to (1+ (position-if #'char-digit-p str :from-end t))))
    (parse-integer (subseq (write-to-string symb) from to))))

(defun ntimes (n fn)
  (loop for i below n
     collect (funcall fn i)))

(defun parse-to-lambda (body &optional (seperator #\$) &aux (count 0))
  (labels ((parse (symb)
             (if (atom symb)
                 (when (char= seperator (char (write-to-string symb) 0))
                   (setf count (max count (1+ (symbol-int symb)))))
                 (mapc #'parse symb))))
    (parse body)
    `(lambda ,(ntimes count
                      (lambda (n) (read-from-string (format nil "~c~s" seperator n))))
       ,body)))
;;(funcall ^(+ 9 9 $0 (* 5 6 $1)) 10 20) => 628

(set-macro-character #\^ (lambda (stream char &aux (code (read stream)))
                           (declare (ignore char))
                           (parse-to-lambda code #\~)))
(funcall ^(+ ~1 ~0) 5 6) => 11

除了CL,还有比CL更好但是更寒冷百倍的语言。不要只上emacs论坛天天看lisp就觉得lisp天下无敌了

这个问题教我这种用 ALGOL68, APL, AUTOMATH, Classic ML, FORTH, ML/1, REXX, SNOBOL, TTM, 1802, 6502, 68000 的怎么回答?

哪种语言?好用的话我会试试看的~

你可以refer你楼上列举的 :joy:

我提名下Smalltalk,或者从smalltalk派生来的erlang

怎么感觉在说C+

我一直怀疑你是不是在计算机博物馆工作???:slight_smile:

1 个赞

看来巨巨已经开始搞起 Smalltalk 了

也在维基百科看到过一些代码示例,但是感觉好像Smalltalk 的代码风格对我来说没有 Common Lisp 的那么好看, 它的性能是不是跟C++ 也有点差距?

国内招 Small talk 的应该也很少吧?

我现在期望就是后面如果去深圳找工作(是的,我现在是单身),可以让我用自己做主用Common Lisp,他们用Java这些就开个socket咯,也不会耗费多少性能的啦(就像nginx) 创业型的公司就更可以了,上一份公司就是我自己选的nodejs,边学边用……

用Smalltalk就是追求完美的动态特性,不考虑性能了。另外Smalltalk是整个IDE+语言写在一个VM里的。如果有特定指令集的处理器来跑smalltalk,或许可以谈下性能,和x86_64就别比了。

我想所有语言核心就是能不能把我们几句自然语言就表达出来的逻辑尽量高效地表达出来!!

例如项目描述里几页纸,几百到几千行描述要干什么(有些逻辑可能不算很精准,但也不要求那么精准,有些词语不同的人有不同的理解和细微差别)

我们的词语不仅仅是语法,还有大量词语库,甚至成语,所以才能几句话表达出丰富逻辑。 这就是对应了我们公用代码库(每个词语对应一个函数,“的了吗”这种抽象字对应语法关键字),不同国家的语言对应了不同框架,成语对应更复杂的函数

所以我计划以后开发的项目都要计划中文三言两语说得很明白凭什么我代码要那么多?那些不是针对这项目的逻辑代码我一定要封装到公用的函数里(就像我们的词语,不会是针对某篇固定的文章吧?)!!

回去吧,地球不欢迎你

All your base are belong to us.

说得怎么好像地球是你们地球人的作品啊?