scheme for babies
这儿不是介绍一门语言,而是介绍一个思维方式
写在前面
对于现在的我们,高级编程语言例如Java,C++,C#,Python等面向对象的概念已经深入人心。在大型工程的时候,面向对象思维比面向过程的优势更加明显。在linux kernel里面,虽然是由C写的,但里面很多地方都有了面向对象的设计方式。比如设备驱动的kobject,kset,ktype,块驱动设备的dentry,
inode,path等。而现在要介绍的LISP是面向过程的语言,是不是没什么价值了?
实际上LISP有自己的优势,目前在很多领域还在使用,尤其是人工智能。我现
在使用的编辑器Emacs里面的函数也全是LISP的。本文会介绍下LISP的历史,然后用一些例子来演示下第一阶段的学习,包括简单函数的编写。需要注意的是LISP有很多方言,我们这儿介绍的是里面的一种方言scheme。
本篇只介绍下scheme历史和环境搭建,再用一个简单例子介绍下scheme的运行方式
scheme历史
Lisp是20世纪50年代后期由John McCarthy设计的一套记号表示方式,是为了能对某种特定形式的逻辑表达式,也就是递归方程的使用做推理。 McCarthy想用Lisp作为一种数学记述形式,可是它的确是一种实用的程序设计语言。一个Lisp解释器就像一个机器,可以实现用lisp描述的计算过程。Lisp的名字来自于表处理(list processing)。
lisp有很多种方言,我们要介绍的scheme是lisp众多方言里面的一种,是1975年由MIT人工智能实验室的Guy Lewis Jr. 和Gerald Jay Sussman设计的,后来应用到了MIT教学中。
scheme环境搭建
我这边用的是Ubuntu+Emacs。所以只介绍Linux下的scheme配置和Emacs里面的运行方式。不过其他平台也是类似的。
首先下载mit scheme
https://www.gnu.org/software/mit-scheme/
然后安装。安装方式就按照一般linux 软件安装方式来就行
然后打开~/.emacs ,把下面几句贴上去。
;;; Always do syntax highlighting
(global-font-lock-mode 1)
;;; Also highlight parens
(setq show-paren-delay 0
show-paren-style 'parenthesis)
(show-paren-mode 1)
;;; This is the binary name of my scheme implementation
(setq scheme-program-name "mit-scheme")
打开emacs
M-x run-scheme就进入scheme交互环境了
写一个算术看看
(+ 1 1)
就可以看到结果是2
这时候就证明环境OK了。
例子演示
我们写一个求fibnacci数的函数:
(define (fib n)
(define (iter_fib next now n)
(if (= n 0)
now
(iter_fib (+ now next) next (- n 1))
)
)
(iter_fib 1 0 n)
)
命名成fib.scm,保存至当前工作目录下,然后打开scheme环境,运行命令(load “fib.scm”),可以看到下面的输出。
1 ]=> (load "fib.scm")
;Loading "fib.scm"... done
;Value: fib
然后输入(fib 3),可以看到下面的输出
1 ]=> (fib 3)
;Value: 2
这个就是scheme的代码运行过程。具体的我们下一篇介绍
总结
我们本篇介绍了下scheme的历史,环境搭建,用一个代码演示了下代码文件的加载运行,接来下会详细介绍scheme的编写。
领取专属 10元无门槛券
私享最新 技术干货