lisp scheme 果壳_走出Lisp(Scheme)困境

从去年开始入坑Lisp,周周转转也算是基本入门了这一传说中的语言。

Lisp确实是一门很开明的语法规范。lambda是基本定义形式,递归在其骨子深处,试图通过函数表达世界,的确这个世界是周而复始的,有些人愿意称为循环,一个固定的迭代算法加上算法演算后不断更新的执行环境。

确实Lisp 的入门会让你感受到递归的眩晕和神秘,这很迷人,但总想着递归搞定问题,未免有些误入歧途,Lisp的后续版本其实对循环是支持的。递归可以实现循环,只需要小小的包装。

面向对象概念据说是Lisp最先提出的,但使用上一开始确实看着有些别扭。这个是可以直接使用的,然而Java等后续在面向对象上确实是更进一步的。我更喜欢用闭包去做一些简单的包装,实现简单的面向对象,这一点在不少后续的脚本语言都有借鉴。

一直是鼓吹中的宏,几乎给与了高级语言使用者一个编译器的表达。看到网上很多人不明白,甚至觉得不必要,在这一点上,我想说,不明白的那些多数是做商业软件开发的,更专业化的学术研究或者非常规的IT应用。

Lisp通过宏给与了开发者上帝般的待遇,通常更大的权限对应的是更多的风险,企业选用该编程语言也就意味着需要招聘能够驾驭该风险的人,成本相比Java等保守的语言就会高出很多,而且业务拓展也会在人才数量上受到限制。

但我很喜欢宏这个东西,因为它给了我定义自己风格或熟悉语法的机会。曾经被一个985院校毕业的同事告知不要使用那些有风险的表达,确实避开风险就会基本没有问题。宏的使用在官方也确实被告知不要轻易使用,除非现有的规则使你不爽。我更多的喜欢发现所谓风险背后的使用价值,就好像玩耍双截棍,最开始不小心就会被自己抽一下,当熟悉后,一切就会不同了,棍子在身边翻滚,还很花哨,实际的击打效果也是值得一提的。从开始捣鼓宏开始,我的开发环境已经崩盘好多次了,宏的道必须走下去。

学习中被Lisp的continuation卡住,翻看了很多文档,它与lambda表达式不同,lambda是顺序执行的,而continuation提供了中断挂起在内存,并持有该代码块,这为跳出代码块和跳出后在特定时间回到相应位置提供了可能。这个比Java 的continues在逻辑上更为底层,Java的continues只是继续下一次循环,而继续下一次循环只是这一演算的一小部分。

Lisp的学习历程对商用开发者是不友好的,因为它总喜欢从很专业的数学和编程语言原理开始,在商业的角度并不需要太多人关心这个。

在经历了上述折腾后,使用asdf,引入现有类库,从相对友好的编程模式开始Lisp之旅,然后和学习其他语言一样慢慢的向下学习该语言的细节和原理,最后在此基础上如何做出拓展。

交流的语言源于沟通的需要,然而语言远在交流之前就已存在,语言是人对事物标记和回溯的工具,为了交换认识,才衍生出通用的事物标记——各种(地区)方言。与其说我们在使用编程语言,还不如说我们在表达我们对世界的看法。

Lisp的使用是数学的思考,是生活的缩影,更值得赞许的是它在引导开发者认识问题的本质并为独特的表达提供可能,所以需要一个平常心,好奇心,在日常中慢慢品悟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值