Lisp程式是由三個基本構建塊:
atom
list
string
一個原子是一個數位連續字元或字串。它包括數位和特殊字元。
以下是一些有效的原子的例子:
hello-from-tutorials-yiibai name 123008907 *hello* Block#221 abc123
列表是包含在括號中的原子和/或其他列表的序列。以下是一些有效的列表的範例:
( i am a list) (a ( a b c) d e fgh) (father tom ( susan bill joe)) (sun mon tue wed thur fri sat) ( )
字串是一組括在雙引號字元。以下是一些有效的字串的例子:
" I am a string" "a ba c d efg #$%^&!" "Please enter the following details :" "Hello from 'Tutorials Yiibai'! "
分號符號(;)是用於表示一個注釋行。
例如,
(write-line "Hello World") ; greet the world ; tell them your whereabouts (write-line "I am at 'Tutorials Yiibai'! Learning LISP")
當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
Hello World I am at 'Tutorials Yiibai'! Learning LISP
以下是一些要點需要注意:
在LISP語言的基本數學運算是 +, -, *, 和 /
Lisp實際上是一個函式呼叫f(x)為 (f x),例如 cos(45)被寫入為 cos 45
LISP表示式是不區分大小寫的,cos 45 或COS 45是相同的。
LISP嘗試計算一切,包括函式的引數。只有三種型別的元素是常數,總是返回自己的值:
數位
字母t,即表示邏輯真
該值為nil,這表示邏輯false,還有一個空的列表。
在前面的章節中,我們提到LISP程式碼計算過程中採取以下步驟:
讀取器轉換字元到LISP物件的字串或 s-expressions.
求值器定義為那些從s-表示式內建的Lisp語法形式。計算第二個級別定義的語法決定了S-表示式是LISP語言形式。
現在,一個LISP的形式可以是:
一個原子
空或非名單
有符號作為它的第一個元素的任何列表
求值器可以作為一個函式,它接受一個有效的LISP語言的形式作為引數,並返回一個值。這個就是為什麼我們把括號中的LISP語言表達,因為我們要傳送的整個表示式/形式向求值作為引數的原因。
名稱或符號可以包含任意數量的空白相比,開放和右括號,雙引號和單引號,反斜槓,逗號,冒號,分號和豎線其他字母數位字元。若要在名稱中使用這些字元,需要使用跳脫字元()。
一個名字可以包含數位,但不能全部由數位組成,因為那樣的話它會被解讀為一個數位。同樣的名稱可以具有週期,但週期不能完全進行。
LISP計算一切,包括函式的引數和列表的成員。
有時,我們需要採取原子或列表字面上,不希望他們求值或當作函式呼叫。
要做到這一點,我們需要先原子或列表中帶有單引號。
下面的例子演示了這一點:
建立一個名為main.lisp檔案,並鍵入下面的程式碼進去:
(write-line "single quote used, it inhibits evaluation") (write '(* 2 3)) (write-line " ") (write-line "single quote not used, so expression evaluated") (write (* 2 3))
當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
single quote used, it inhibits evaluation (* 2 3) single quote not used, so expression evaluated 6