common lisp 学习第一天 初步接触
生活随笔
收集整理的這篇文章主要介紹了
common lisp 学习第一天 初步接触
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://common-lisp.net/project/lispbox/ lispbox?集成了Emacs、Slime和CCL。 解壓后直接運(yùn)行l(wèi)ispbox.bat即可
//(quote x)?返回 x,我們簡(jiǎn)記為 'x >?(quote x) x > 'x x
//(atom x) 當(dāng) x 是一個(gè)原子或者空表時(shí)返回原子 t,否則返回NIL。在 Common Lisp 中我們習(xí)慣用原子 t 表示真,而用空表 ()和NIL 表示假。 > (atom 'a) t > (atom '(a b c)) NIL > (atom '()) t 一個(gè)被引用的表僅僅被視為表 > (atom '(atom 'a)) NIL
//(eq x y) 當(dāng) x 和y 指向相同的對(duì)象的時(shí)候返回t,否則返回NIL,值得注意的是在Common Lisp中,原子對(duì)象在內(nèi)存中只會(huì)有一份拷貝,所以(eq 'a 'a)返回t > (eq 'a 'a) t > (eq 'a 'b) NIL > (eq '() '()) t > (eq '(a b c) '(a b c)) NIL
//(car x) 要求 x 是一個(gè)表,它返回 x 中的第一個(gè)元素 > (car '(a b)) a
//(cdr x) 同樣要求 x 是一個(gè)表,它返回x中除第一個(gè)元素之外的所有元素組成的表 > (cdr '(a b c)) (b c)
//(cons x y)期望y的值是一個(gè)表并且返回一個(gè)新表,它的第一個(gè)元素是x的值, 后面跟著y的值的各個(gè)元素.? > (cons 'a '(b c)) (a b c) (cons x y) 返回一個(gè)cons cell (x y),如果y不是一個(gè)list,將會(huì)一dotted pair形式展現(xiàn)這個(gè)cons cell > (cons 'a 'b) (a . b) 一個(gè)cons cell的第二項(xiàng)如果是另一個(gè)cons cell,就表示成表的形式 > (cons 'a (cons 'b 'c)) (a b . c) 若一個(gè)cons cell第二項(xiàng)為空,就省略不寫 >?(cons 'a (cons 'b ())) (a b) 這樣,多重的cons cell就構(gòu)成了表: > (cons 'a (cons 'b (cons 'c ()))) (a b c)
//函數(shù)表示為(lambda (...) e),其中 ...是原子(叫做參數(shù)),e是表達(dá)式 >?(lambda (x) (cons x '(b))) #<Anonymous Function #x2100D5CBFF> 函數(shù)調(diào)用:((lambda (...) e) ...) 表達(dá)式中第一個(gè)元素為函數(shù) > ((lambda (x) (cons x '(b))) 'a) (a b) >?((lambda (x y) (cons x y)) 'a '(b)) (a b) > ((lambda (x y) (cons x (cdr y))) 'z '(a b c)) (z b c) 參數(shù)在表達(dá)式中不但可以作為自變量也可以作為操作符使用(不是cl,在環(huán)境中報(bào)錯(cuò)) > ((lambda (f) (f '(b c))) '(lambda (x) (cons 'a x))) (a b c)
//Emacs快捷鍵 C-x C-f 創(chuàng)建新文件 C-x C-s 保存工作文件 C-c C-c 重新編譯 C-c C-z 切換到REPL
//編寫hello world函數(shù)并保存到文件hello.lisp中。 (defun hello-world()? (format t "hello, world!")) 加載lisp文件(帶相對(duì)路徑) > (load "./test/hello.lisp") #P"d:/Program Files/lispbox-0.7/test/hello.lisp" 執(zhí)行函數(shù) > (hello-world) hello, world! 加載編譯后的文件,compile-file先將文件編譯成fsl并返回fsl文件名稱。 >?(load (compile-file "./test/hello.lisp"))
//列表 > (list 1 2 3) (1 2 3) 屬性列表(property list) plist > (list :a 1 :b 2 :c 3) (:A 1 :B 2 :C 3) 返回執(zhí)行符號(hào)后的值 > (getf (list :a 1 :b 2 :c 3) :a) 1
//(quote x)?返回 x,我們簡(jiǎn)記為 'x >?(quote x) x > 'x x
//(atom x) 當(dāng) x 是一個(gè)原子或者空表時(shí)返回原子 t,否則返回NIL。在 Common Lisp 中我們習(xí)慣用原子 t 表示真,而用空表 ()和NIL 表示假。 > (atom 'a) t > (atom '(a b c)) NIL > (atom '()) t 一個(gè)被引用的表僅僅被視為表 > (atom '(atom 'a)) NIL
//(eq x y) 當(dāng) x 和y 指向相同的對(duì)象的時(shí)候返回t,否則返回NIL,值得注意的是在Common Lisp中,原子對(duì)象在內(nèi)存中只會(huì)有一份拷貝,所以(eq 'a 'a)返回t > (eq 'a 'a) t > (eq 'a 'b) NIL > (eq '() '()) t > (eq '(a b c) '(a b c)) NIL
//(car x) 要求 x 是一個(gè)表,它返回 x 中的第一個(gè)元素 > (car '(a b)) a
//(cdr x) 同樣要求 x 是一個(gè)表,它返回x中除第一個(gè)元素之外的所有元素組成的表 > (cdr '(a b c)) (b c)
//(cons x y)期望y的值是一個(gè)表并且返回一個(gè)新表,它的第一個(gè)元素是x的值, 后面跟著y的值的各個(gè)元素.? > (cons 'a '(b c)) (a b c) (cons x y) 返回一個(gè)cons cell (x y),如果y不是一個(gè)list,將會(huì)一dotted pair形式展現(xiàn)這個(gè)cons cell > (cons 'a 'b) (a . b) 一個(gè)cons cell的第二項(xiàng)如果是另一個(gè)cons cell,就表示成表的形式 > (cons 'a (cons 'b 'c)) (a b . c) 若一個(gè)cons cell第二項(xiàng)為空,就省略不寫 >?(cons 'a (cons 'b ())) (a b) 這樣,多重的cons cell就構(gòu)成了表: > (cons 'a (cons 'b (cons 'c ()))) (a b c)
//函數(shù)表示為(lambda (...) e),其中 ...是原子(叫做參數(shù)),e是表達(dá)式 >?(lambda (x) (cons x '(b))) #<Anonymous Function #x2100D5CBFF> 函數(shù)調(diào)用:((lambda (...) e) ...) 表達(dá)式中第一個(gè)元素為函數(shù) > ((lambda (x) (cons x '(b))) 'a) (a b) >?((lambda (x y) (cons x y)) 'a '(b)) (a b) > ((lambda (x y) (cons x (cdr y))) 'z '(a b c)) (z b c) 參數(shù)在表達(dá)式中不但可以作為自變量也可以作為操作符使用(不是cl,在環(huán)境中報(bào)錯(cuò)) > ((lambda (f) (f '(b c))) '(lambda (x) (cons 'a x))) (a b c)
//Emacs快捷鍵 C-x C-f 創(chuàng)建新文件 C-x C-s 保存工作文件 C-c C-c 重新編譯 C-c C-z 切換到REPL
//編寫hello world函數(shù)并保存到文件hello.lisp中。 (defun hello-world()? (format t "hello, world!")) 加載lisp文件(帶相對(duì)路徑) > (load "./test/hello.lisp") #P"d:/Program Files/lispbox-0.7/test/hello.lisp" 執(zhí)行函數(shù) > (hello-world) hello, world! 加載編譯后的文件,compile-file先將文件編譯成fsl并返回fsl文件名稱。 >?(load (compile-file "./test/hello.lisp"))
//列表 > (list 1 2 3) (1 2 3) 屬性列表(property list) plist > (list :a 1 :b 2 :c 3) (:A 1 :B 2 :C 3) 返回執(zhí)行符號(hào)后的值 > (getf (list :a 1 :b 2 :c 3) :a) 1
總結(jié)
以上是生活随笔為你收集整理的common lisp 学习第一天 初步接触的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL存储过程和函数区别(超级简单,人人
- 下一篇: 【springboot】之自动配置原理