*其實我不會lisp,以下內容都是我瞎編的*
笑話一則:
乙個間諜從nasa的主機盜取了乙個用lisp編寫的核心程式,為了證明自己說的是真話,他列印出了程式的最後一頁:
)))))))))))))))))))))))))))))
))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))
lisp程式是由形式(form)排列起來構成的。它通過以下規則進行求值。
1、符號(symbol)會被解釋為變數,求出該變數所繫結的值。
2、除符號以外的原子,則求出其自身的值。即:整數就是整數本身,字串就是字串本身。
3、如果形式為表,則頭乙個符號為函式名,剩餘的元素為引數(這是commonlisp等lisp-2系列的lisp中的行為)。
表示函式名的部分,還分為函式、特殊形式和巨集三種型別。
1、函式在將引數求值後會被呼叫。
2、特殊形式相當於其他語言的控制結構,比如賦值 (setq n 10)。
3、lisp中的巨集,可以在對表示式求值時,通過對構成程式的表進行操作,從而改寫程式本身。
quote 操作符接受乙個實參,並完封不動地返回它。
common lisp 定義 ' 作為 quote 的縮寫。
(format t "hello, lisp~%")
(format t "~a plus ~a equals ~a. ~%" 1 2 3)
hello, lisp
1 plus 2 equals 3.
(setq n 10)
(print n)
(let ( (x 1) (y 2) )
(format t "x = ~a, y = ~a. ~%" x y))
(let ( (q 3) )
(format t "q = ~a. ~%" q))
x = 1, y = 2.
q = 3.
(defparameter *glob* 99)
(defparameter *pi* 3.14)
(format t "glob = ~a, pi = ~a. ~%" *glob* *pi*)
glob = 99, pi = 3.14.
(defconstant const *glob*)
(defconstant const2 123)
(format t "const = ~a, const2 = ~a. ~%" const const2)
const = 99, const2 = 123.
(setf *glob* 999999)
(let ((n 10)) (setf n 2) (format t "glob = ~a, n = ~a" *glob* n))
glob = 999999, n = 2
(print (+ 2 3 4))
(let ((a 10))
(setf a (* a 3))
(print a))
9
符號 t 表示真, nil 表示假,空表()也表示假。
函式listp:若引數是乙個列表則返回真。
函式null:若引數是乙個空表則返回真。
函式not:若引數是nil則返回真。
條件式if接受三個引數,乙個test表示式、乙個then表示式、乙個else表示式。最後乙個引數可以省略。
若test求值為 t,則對then表示式求值並返回該值,若為nil,則對else表示式求值並返回該值。
(if (> 2 3)
(print 2)
(print 3))
3
(print
(if (listp '(a b c))
(+ 1 2)
(+ 5 6)))
3
do是最基本的迭代操作符
do的第乙個引數是一組變數的初始化列表,每個元素是如下形式(variable initial update),表示變數名、初值、每次迴圈要做的操作。
第二個引數是乙個或多個表示式,第乙個表示式用來測試迴圈終止,其餘的表示式依次求值,最後乙個表示式作為do的返回值。
接下來的引數是迴圈體,每次迴圈依次執行。
(print
(do ((i 0 (+ i 1)))
((> i 10) 9999)
(print i)))
0
defun來定義函式,通常接受三個以上的引數,第乙個引數是函式名;第二個引數是乙個列表,裡面是函式接受的引數;第三個引數是表示式列表,即函式主體。
如何優雅的入門golang
golang標準庫文件 高效能分布式系統開發 海量並行處理 遊戲服務端開發再好不過了 package main import fmt func main 複製 go run main.go hello world 複製 識別符號用來命名變數 型別等程式體。乙個或者多個字母 a za z 數字 0 9...
如何優雅的建立物件(一)
在建立物件的時候大部分程式設計師都是直接用new的形式。下面來講解另乙個建立物件的方式,用靜態工廠方法代替構造器。比如我們想得到乙個integer物件,可以直接new得到,也可以用integer.valueof 這個靜態方法直接得到。int a 5 integer b newinteger a in...
如何優雅的送禮?
送禮的尺度要以法律規定和公司制度為紅線,在職場上,肯定不能送重禮,否則可能成為商業賄賂。很多國際化的公司都有明確的送禮和收禮規定,不能超過幾百元。牢記這一條,你就會發現有創意是多麼的重要,因為你的預算空間實在很小。送禮這件事,從策劃選禮物到對方接收到禮物是乙個操作過程,最重要的是送禮時刻。其實對於有...