scheme 之旅(1)

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的编写。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180227G00KJK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券