八个比特

实用CommonLisp教程笔记#1

字数统计: 904阅读时长: 3 min
2019/04/07 Share

P12 “Hello word”的实现

>(format t "hello, world") 

//t是format函数接受的第一个实参,t是标准输出流(standard-output)的简称;而后面的字符串是第二个实参

<hello, world

NIL //NIL是Lisp中布尔值的空值

/* ~a意为消耗一个实参,去除字符串的双引号 ; ~t用于制表,不使用任何实参 eg.~10t即为处理下一个参数前将光标移动10列 ; ~%不消耗实参,用于换行 ; ~r可以将数字转为英文

eg. >(format nil "~r" 110)

<one hundred and ten

*/

ALSO WRITE AS

>(write-line "hello, world")

>(print "hello, world")

P13 DEFUN:定义函数

>(defun function_name (varlist) (function_body) )

//函数仅在当时创建的缓冲区起作用

P13 LOAD:引用 , COMPILE-FILE编译

>(load "xx.lisp" ) //使用绝对路径

//////////////////////////////////////////////////

>(load (compile-file "xx.lisp" ) )

<

//ccl下fast compile-file出的文件格式是xx.faslw64

P18 LIST:列表 , GETF:获取属性表

>(list :a pa1 :b pa2 :c pa3)


<( :a pa1 :b pa2 :c pa3)

//////////////////////////////////////////////////

>(getf (list :a pa1 :b pa2 :c pa3) :a)


<pa1

P19 DEFVAR:声明变量 , PUSH宏 , 查看数据库内容

/变量如果是全局变量,可以在头尾各加号进行区别(例如db),声明的变量没有

类型区别,变量的值有类型区别*/

//////////////////////////////////////////////////

>(push varlist *db*) //不单独使用

//////////////////////////////////////////////////

>*db*


<{the data of db}


complementary

两种写法的意义不同,第一种写法使用了dolist,而第二种使用format在整个数据库本身上循环

!记得补充几种循环的不同 http://www.yiibai.com/lisp/lisp_loops.html

P21 FORCE-OUTPUT , READ-LINE:读取单行文本 , PARSE-INTEGER:过滤字符,输出整数

(force-output varlist) //跟在format后一句使用,force-output的主要目的是将上面输出的信息强制输出,不等待换行符的出现

//////////////////////////////////////////////////

>(read-line varlist)

//////////////////////////////////////////////////

>(parse-integer (prompt-read "Rating") :junk-allowed t)

//此处的junk-allowed t是可选参数,意义在于允许接受非整数值,返回NIL

P22 Y-OR-N-P:是否函数 , LOOP宏

>(y-or-n-p "Ripped [y/n]: ")

//////////////////////////////////////////////////

//此处用了return来退出

可见,LOOP宏的结构是:

>(loop (执行体)

(if (条件体)) (非执行体) )

P23 保存和加载数据库:WITH-OPEN-FILE宏 , STEF宏

//WITH-OPEN-FILE函数后的:direction :output指定了正在打开一个用于写入的文件,而:if-exists :supersede说明当存在同名的问件事覆盖已存在的文件

//print db out将db打印出来,与format不同,print打印是无格式的,另外还有princ

//WITH-STANDARD-IO-SYNTAX确保print打印的变量为标准值

//////////////////////////////////////////////////

//加载时同样是WITH-OPEN-FILE函数,不过后面的参数变成了(in filename)

//STEF宏是赋值操作符,他将第一个参数设置成其第二个参数的求值的结果,例子中read in(即用户加载的数据)赋值给了db数据库

P24 查询数据库:SELECT函数 , REMOVE-IF-NOT函数 , EQUAL函数

//与MySQL不同,select不用指出表和库,因为它用在list中

//////////////////////////////////////////////////

//remove-if-not接受一个谓词和一个原始list,它的作用仅仅是筛选,即建立一个新列表,选出符合谓词条件的数据.谓词参数返回布尔值.例子中的谓词是EVENP(当其参数为偶数时返回布尔值真,#’记号意为”获取函数,其名如下”,若没有该记号,EVENP会认作为一个变量名对待,并且会查找该变量的值)

ALSO WRITE AS

//其会检查实参取模2时等于0的情况

//LAMBDA表示正在定义匿名函数的指示器

CATALOG