差不多大三的时候便听说lisp这种语言,看一些文章描述,只是觉得这是一种大牛们玩的语言。一直也不敢轻易接触。 那个时候连python和ruby都有些生畏,只是知道c,java,php之类的。后来看了一篇文章之后,决心要自己学习一下 python。写了一个java项目之后的我,接触到python,便喜欢上了,从此便不想再写java的代码了。后来又接触ruby ,觉得脚本语言也相差无几。关于函数式编程,因为在学习python,再加上社区里各种大牛的熏陶,也体会到不少。 但是像lisp这种纯函数式编程的语言,久久没有接触。
一个月之前,来到小米实习。入职当天,晚饭后,小组内的一个程序员找我聊天。由于当时刚刚来,也不知道以怎么 样的方式去和一个程序员交流,而且是一个很有可能面试过不少人的程序员。幸亏我自己也坦荡没有什么可以紧张的。 顺便就当作问问题的好机会。慢慢的我们先聊python,幸好自己对于python有比较多的研究。虽然一些方面的知识, 对细节了解的不够,但是多少自己都研究过,看过网上那些参差不齐的文章。于是就按着自己的学习过程和看法, 半询问,半聊天的方式交流起来。中间我询问使用hadoop的最终优势是什么?其实这个问题我在网上寻找资料也很久, 但是没有一个我满意的答案。没想到他的短短解释就让我明白了。首先讲到计算机性能,从提高频率到多核的方向 发展。多核的编程就会涉及到锁的问题。这是多线程编程中会碰到的最麻烦的问题,会让程序编写变得异常复杂。 而这种锁的问题本质就是因为有共享的对象。我们涉及到关于锁的操作都是和共享对象相联系的。而hadoop这个系统 就是解决了多个机器节点之间的程序运行锁问题。它可以让进来的东西很好的利用多个机器运行。在hadoop里面, 我们可以看到我们都要编写map,reduce这样的函数。其实这个就是函数式编程的思想。这么一说,我才明白: 使用hadoop主要的目的就是最大限度利用多个机器完成庞大的计算。这是计算机研究领域里面一个很普遍的问题啊。 可是之前在我的脑袋里被想的那么复杂。基于此,其实不一定需要用到hadoop,如果我们编写的每个程序在各自节点 上运行,对其它节点没有影响,那么就已经达到hadoop的效果了。于是纯函数的概念提出来了。编写的程序, 让各个函数之间的偶和度尽量的低。那么在运行的时候,就不需要考虑死锁。而lisp就满足这样的要求。甚至是 它的特点。
common-lisp和sbcl是lisp的两个方言。 在ubuntu下安装很简单
sudo apt-get install sbcl
sudo apt-get install common-lisp
运行sbcl
便启动解释器了。
另外自己还安装了一下haskell
在这里 下载合适的包,按照提供的方法安装便可。