Common lisp 学习笔记

     知道lisp这一门语言,应该是半年前的事了,FreeBSD技术交流群的董老师,一直群里宣扬lisp, 说lisp是MIT计算系学生必修课程,并且他本人也一直在学习。有一天,他将国内lisp界的代表人物—伞哥的blog发到群里,我花了几个小时,认真将他博客文章几乎都看完,一是觉得伞哥此人是一个很有意思的人,二是lisp应该是一种比较有趣的语言。于是乎,我慢慢开始关注lisp语言了

首先,lisp这个理论,是1958年,美国的约翰.麦肯锡提出来的,最早只是以论文的形式存在,并没有形成真正的编程语言,随着计算机科学的发展,其才慢慢的成为了编程语言。现在的lisp的方言有许多种,也即是许多不同的实现方式。其中最著名的莫过于common lisp和scheme. 其它的,我也不了解.

Lisp是List processer,也就是链式处理的简称,那么在lisp中,它基本的数据结构只有两种,原子和列表(atom and list ),其它的结构,可以通过列表来达到.

原子: 数字(整形,浮点型,复数等),字符,字符串,

clip_image002

列表: (list 1 3 4 67 ) 或是’( 1 3 5 78 )

clip_image004

使用列表做为列表的成员

clip_image006

使用字符串作为列表的成员

clip_image008

使用已经绑定了值的符号作为列表的成员

clip_image010

使用标准宏的结果作为列表成员

clip_image012

宏:lisp中的宏和C语言的宏,名字虽然是相同的,但其功能与用法,与C语言有很大的区别

如dolist宏,它的作用是将列表中的元素,依次绑定到一个变量当中,最后输出一个nil

clip_image014

dolist的另一个作用,把解引用中的所有元素依次绑定到指定的变量

clip_image016

Cons的作用,对两个变量进行操作,变量可能是符号,或是列表

clip_image018

Cdr,取列表变量从第二个元素到最后一个元素

clip_image020

Car取列表(或是解引用)的第一个元素

clip_image022

Let 用法

(let

((var1 value)

(var2 value))

body)

clip_image024

在上图中

((a 10 ) (b 10)) 将a和b的变量都绑定为10, 程序主体 (print ( + a b) )

函数的返回值为print的返回值

Common lisp相关运算

clip_image026

Common lisp的运算符和其它的编程语言不太一样,它是将运算符放在第一位,如在我们的C语言中,运算符一般是放在两变量中间,

( + 10 20) 两数相加

( - 20 10 ) 两数相减

( * 20 10) 两数相乘

( / 20 10) 两数相除

(mod 4 3 ) 两数相除取余数

(sqrt 4) 其值为2,取一个数的开平方

………………….

在common lisp中,不是采用在其它编程语言中常见的{}大括号进行语句块整合,而是采用()小括号的方式来进行整合

同时,也有它自己的编程风格

Common lisp表达式

If then else语句

clip_image028

上语句的意思,当a大于b时,打印a,否则打印b

Do 宏

clip_image030

(i 0) 绑定i的初始值为0, ( + 1 i)

(( > = i 4) 循环中止条件

(print I ) 程序

posted @ 2012-12-08 14:31  gentoofly  阅读(384)  评论(0编辑  收藏  举报