lisp语言_Lisp劝退篇

4ef140cac8fe389f5013b245ee45cf35.png

Common Lisp下称CL。

难度大

我学Lisp很费劲,就个人而言Lisp是投入精力第二多的IT技术(仅次于C++)。CL的宏屡屡让我绝望,感觉比C++的模板元编程还难。

解:忍 || 滚

用途少

搜一下会发现:用CL的公司很少,工作机会也很少。我只用CL为他人写过几个小工具,其实也可以用Python实现。

解:“有条件要用Lisp,没有条件创造条件也要用Lisp”。

方言多

CL、Schema、Clojure、newLISP等等,各有所长,选择困难。

解:我学Lisp目的是作为主力语言(而非脚本)开发实用程序和项目,所以选CL

实现杂

选定CL,还有十几种开源、商业实现待选。

解:看完Wiki再浏览一遍各CL实现的官网,目前多数凉凉,我选开发最活跃的SBCL

编辑器陌生

对开源CL实现来说,目前Emacs是唯一选择,但我对Emacs重度应用Ctrl键深恶痛绝。

解:我熟悉VIM键位,用Spacemacs

语法独特

直接写语法树,需要直面层层叠叠的括号。下面是SBCL的部分代码,大家感受一下:

……
(funcall dst-set-fn dst dst-word-offset
        (word-logical-or (word-logical-and value mask)
                         (word-logical-andc2 orig mask)))))))))))))))))

解:忍。其实习惯后影响不大,括号交给编辑器匹配。

开发方式独特

与我熟悉的“编辑-构建-调试-运行”方式不同,Lisp开发用Read-Evaluate-Print Loop (REPL)工作循环。没有main函数,我从哪开始写、程序从哪开始运行呢?

解:REPL是优点,其他语言纷纷借鉴:Python有ipython/bpython、Java9引入JShell、C++有ch。

基础语法繁琐

字符串拼接:(concatenate 'string a b) C++:a + b

变量交换:(rotatef a b) C++:swap(a, b)

设置数组元素:(setf (svref v i) 123) C++:v[i] = 123

判断大写字母:(lower-case-p #a) C++:islower('a')

解:只是“基础语法”繁琐,CL有“宏”和很多高阶函数,得写到一定层次才能把总体代码量挽回来。

整体生态对Windows支持不完善。

SBCL在Windows上一般落后好几个版本。

解:但总体情况越来越好,Windows版的CL和Emacs都日趋稳定。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值