第二章 welcome to lisp
函数调用是一般用()包裹,第一个参数为函数名,后面的参数为实参。
如:加法:(+ 1 2) → 3
此种表示法为前序表示法。
![](https://img-blog.csdn.net/20170921135155447?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQmFuZ1Nvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
CLISP的求值方式:
1.先对参数从左到右求值,函数符号求值则为函数体,实参符号求值则为实参值
2.将实参值应用到函数体中,用于求出最终的值并返回。
特殊的操作符:quote,其并不是按照上面的求值规则,而是特定的规则。
quote接受一个参数并返回那个参数,即:什么也不做,只是将接受的参数值返回。
quote的语法糖为:'(单引号),使用'等价于使用quote。
如:(quote (+ 1 2)) → (+ 1 2)或'(+ 1 2)→(+ 1 2)
![](https://img-blog.csdn.net/20170921135253204?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQmFuZ1Nvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
与其他语言不同的数据类型有:符号和列表
符号通常不对自身求值,若想引用一个符号,则要使用'(单引号)。
列表是被括号包住的零个或多个的元素来表示的。可以是任何类型,也包括列表。
要使用列表的话,就要引用,不然lisp会以为是一个函数调用。如:'(1 "aa" (1 2))
引用之后则保护了整个列表及里面的元素不被求值。
可以用list创建一个列表,表示空列表的方式:()或nil
可以用cons来构造列表,若第二个参数是列表,则返回一个由第一个参数和第二个列表组成的新列表。
取出列表中的元素操作:car、cdr
car:取出列表第一个元素
cdr:取出列表第一个元素之后的元素。
其中,还可以使用英文单词,first、second、third...取出特定位置的元素
如:加法:(+ 1 2) → 3
此种表示法为前序表示法。
CLISP的求值方式:
1.先对参数从左到右求值,函数符号求值则为函数体,实参符号求值则为实参值
2.将实参值应用到函数体中,用于求出最终的值并返回。
特殊的操作符:quote,其并不是按照上面的求值规则,而是特定的规则。
quote接受一个参数并返回那个参数,即:什么也不做,只是将接受的参数值返回。
quote的语法糖为:'(单引号),使用'等价于使用quote。
如:(quote (+ 1 2)) → (+ 1 2)或'(+ 1 2)→(+ 1 2)
与其他语言不同的数据类型有:符号和列表
符号通常不对自身求值,若想引用一个符号,则要使用'(单引号)。
列表是被括号包住的零个或多个的元素来表示的。可以是任何类型,也包括列表。
要使用列表的话,就要引用,不然lisp会以为是一个函数调用。如:'(1 "aa" (1 2))
引用之后则保护了整个列表及里面的元素不被求值。
可以用list创建一个列表,表示空列表的方式:()或nil
可以用cons来构造列表,若第二个参数是列表,则返回一个由第一个参数和第二个列表组成的新列表。
取出列表中的元素操作:car、cdr
car:取出列表第一个元素
cdr:取出列表第一个元素之后的元素。
其中,还可以使用英文单词,first、second、third...取出特定位置的元素