common lisp 学习第四天 变量、宏
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                common lisp 学习第四天 变量、宏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            //變量 //引入變量:變量作用域括號內 (let ((x 10) (y 20) z) ...) 引入變量列表中的變量 (let* ((x 10)? (y (+ x 10)) ...) //全局變量 之前有沒有值都可以賦值 (defparameter *count*變量名0值"doc描述") 變量未定以才可以賦值,也可以不給定值 (defvar *count*變量名?0值?"doc描述") //常量 (defconstant a常量名10值) //賦值 (setf place保存值的位置?value值) 遞增 (incf x)——(setf x (+ x 1)) (incf x 10)——(setf x (+ x 10)) 遞減 (decf x)——(setf x (- x 1)) 位置間輪換值 (rotatef a b) 向左移動賦值a=b,b=20 (shiftf a b 20) 
//宏 //if (ifcondition條件?then-form滿足條件執行[else-form]不滿足條件執行) //when當滿足條件執行,unless當不滿足條件執行 (whencondition條件 執行1 執行2) 定義宏 (defmacro my-when (condition &rest body) `(if ,condition (progn ,@body))) (defmacro my-unless (condition &rest body) `(if (not ,condition) (progn ,@body))) progn操作符:逐個執行后面的語句。 //cond多重分支 (cond (test-1條件form*執行體) ... (test-N form*)) 可以用t代表if中的else分支 (cond (a (do-x)) (b (do-y)) (t (do-z))) //and or是宏,not是函數 //dolist循環列表操作 (dolist (var存儲每個值的變量?list-form列表) body-form*循環體) 循環打印 (dolist (x '(1 2 3)) (print x)) 列表結束前中斷,用return (dolist (x '(1 2 3)) (print x) (if (evenp x) (return))) //dotimes循環計數,用return中斷 (dotimes (var變量?count-form循環次數) body-form*循環體) CL-USER> (dotimes (i 2) (print i)) 0? 1? NIL //do循環允許定義任意數量變量,變量改變方式可控,可以定義終止條件。 變量列表也可為空,但是必須保留括號。 (do (variable-definition*變量定義) (end-test-form結束判斷 result-form*返回結果) statement*) variable-definition變量定義形式 (var變量名 init-form初始值 step-form步長) CL-USER> (do ((i 0 (1+ i))) ((>= i 2)) (print i)) 0? 1? NIL 其中(1+ n)等同于(+ 1 n) //loop 簡單形式:無限循環,通過return結束 (loop body-form*循環體) 擴展形式 構建列表 CL-USER> (loop for i from 1 to 10 collecting i) (1 2 3 4 5 6 7 8 9 10) 計算平方數求和 CL-USER> (loop for x from 1 to 10 summing (expt x 2)) 385 統計字符串中元音字母個數 CL-USER> (loop for x across "the quitck brown fox jumps over the lazy dog" counting (find x "aeiou")) 11 計算第11個斐波那契數 CL-USER> (loop for i below 10 and a = 0 then b and b = 1 then (+ b a) finally (return a)) 55
                        
                        
                        //宏 //if (ifcondition條件?then-form滿足條件執行[else-form]不滿足條件執行) //when當滿足條件執行,unless當不滿足條件執行 (whencondition條件 執行1 執行2) 定義宏 (defmacro my-when (condition &rest body) `(if ,condition (progn ,@body))) (defmacro my-unless (condition &rest body) `(if (not ,condition) (progn ,@body))) progn操作符:逐個執行后面的語句。 //cond多重分支 (cond (test-1條件form*執行體) ... (test-N form*)) 可以用t代表if中的else分支 (cond (a (do-x)) (b (do-y)) (t (do-z))) //and or是宏,not是函數 //dolist循環列表操作 (dolist (var存儲每個值的變量?list-form列表) body-form*循環體) 循環打印 (dolist (x '(1 2 3)) (print x)) 列表結束前中斷,用return (dolist (x '(1 2 3)) (print x) (if (evenp x) (return))) //dotimes循環計數,用return中斷 (dotimes (var變量?count-form循環次數) body-form*循環體) CL-USER> (dotimes (i 2) (print i)) 0? 1? NIL //do循環允許定義任意數量變量,變量改變方式可控,可以定義終止條件。 變量列表也可為空,但是必須保留括號。 (do (variable-definition*變量定義) (end-test-form結束判斷 result-form*返回結果) statement*) variable-definition變量定義形式 (var變量名 init-form初始值 step-form步長) CL-USER> (do ((i 0 (1+ i))) ((>= i 2)) (print i)) 0? 1? NIL 其中(1+ n)等同于(+ 1 n) //loop 簡單形式:無限循環,通過return結束 (loop body-form*循環體) 擴展形式 構建列表 CL-USER> (loop for i from 1 to 10 collecting i) (1 2 3 4 5 6 7 8 9 10) 計算平方數求和 CL-USER> (loop for x from 1 to 10 summing (expt x 2)) 385 統計字符串中元音字母個數 CL-USER> (loop for x across "the quitck brown fox jumps over the lazy dog" counting (find x "aeiou")) 11 計算第11個斐波那契數 CL-USER> (loop for i below 10 and a = 0 then b and b = 1 then (+ b a) finally (return a)) 55
總結
以上是生活随笔為你收集整理的common lisp 学习第四天 变量、宏的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: ECMA6--字符串/数组
 - 下一篇: wireshark抓包分析怎么看进程_w