land of lisp 1

land of lisp 是一本非常基础的入门教材,但是尽管基础,还是要求读者对lisp是表控式的语言有明确的概念的。

也就是说,通常lisp的表达式一般是是如下结构的:

(function_name  variable)

了解到这一点,lisp语言就好理解了。

在land of lisp 的第一章中讲述了如何写一个猜数字的游戏,我剔除具体的游戏内容,总结和讨论一下lisp中的语法。

讨论环境是lispbox,common lisp实现采用的sbcl。

 

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^我分^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

………………………………………………漫长连载的分割………………………………………………………………

 

首先是定义变量,全局变量。 根据lisper的习惯,全局变量以*开头结尾,例如*foo*

(defparameter *foo* 100)

如此我们就有了值为100的全局变量*foo*

同时我们也可以用如下方法定义:

(defvar *foo* 100)

这两种方法的不同在于f defvar 不能修改已经定义为全局变量*foo*的值,但是defparameter可以,例:

 

>(defvar *foo* 100)

*FOO*

>(defvar *foo* 200)

*FOO*

>*foo*

100

>(defparameter *foo* 200)

*FOO*

>*FOO*

200

 

有了变量接下来就是函数的定义了,函数的定义和变量的定义一样:

(defun function_name (variable) (function body))

例如定义函数new-add,实现变量a和b相加:

(defun new-add(a b) (+ a b))

正像大家看到的,定义的函数new-add的函数体是一个表达式,这个表达式和lisp的一般表达式结构相同,表达式的函数名是+,变量是a和b。如果将(+ a b)视为整体,将new-add和(a b)也视为变量,则整个定义函数的过程也是一个表达式,这也暗示了lisp在对待函数和变量方式上是非常相似的,正像其他教材中说的,lisp的函数也是变量,这让lisp变的非同一般的灵活。

书中首先介绍的函数是为运算函数(上来就好高级啊)ash:

>(ash 1 1)

2

>(ash 1 -1)

0

是吧,就是为运算啦。

 

接下来就是另一个函数了,setf,它的作用类似于defparameter,但是有所不同:

(setf a 90)可以将a的值变为90,看起来和defparameter作用相同,实际上有两点不同:

1、 defparameter 返回的是变量名称,setf返回的是变量值,很多时候这种返回值上的差异是没有什么关系的,但是当你理解lisp是符号语言的时候,你会觉得这种差异是多么的美妙,呵呵

2、 setf是可以用在局部变量上的,这个在写道局部变量的部分再说

 

最后,一篇文章不能太长……那我再说一点:

1+和1-也是函数……当然2+什么的不是函数啊

>(1+ 4)

5

>(1- 4)

3

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~End page 27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值