land of lisp note
by lkl
section 1
chapter 1-2
定义全局变量:
(defparameter small 1)
(defvar small 2)
定义局部变量:
1 | (let (variable declarations) |
ash(arithmetic shift functionv),算数位移方法,1
2
3
4
5> (ash 11 1)
22
> (ash 11 -1)
5
1 | > (let ((a 5) |
chapter 3
定义全局函数
1 | > (defun function_name (arguments) |
定义局部函数
1 | (flet ((function_name (arguments) |
比较两个符号是否相同:
1 | > (eq 'fooo 'FoOo) |
求幂:
1 | > (expt 53 53) |
显示字符串:
1 | > (princ "Tutti Frutti") |
链接任何两个数据(无论类型):
1 | > (cons 'chicken 'cat) |
从第一个cell中取出元素:
1 | > (car '(pork beef chicken)) |
从第二个cell或剩下所有cell中取出元素:
1 | > (cdr '(pork beef chicken)) |
可以将car和cdr串联到cadr,cdar或cadadr等新功能中。 可以简洁地从复杂列表中提取特定数据。 输入cadr与使用car和cdr一样,它从列表中返回第二项。 (第二个cons单元格的第一个cell将包含该项目。)看一下这个例子:
1 | > (cdr '(pork beef chicken)) |
在这里注意:
1 | > (cddddr '(pork beef chicken fish apple orange )) |
c*r最多可达四级。
这里成功取出了最后两个元素,但是当按照同样的方法取最后一个元素时:
1 | > (cdddddr '(pork beef chicken fish apple orange )) |
构建列表:
1 | > (list 'pork 'beef 'chicken) |
以下三种创建列表的方式没有区别:
1 | > (cons 'pork (cons 'beef (cons 'chicken ()))) |