LISP - 決策
決策結構需要程序員指定一個或多個條件由程序進行評估或測試,以及要執行的語句或語句如果條件被確定為true,如果條件被確定為false那麼選擇要執行其他語句。
下麵是在大多數編程語言中一個典型的決策結構的一般形式為:
LISP提供了以下類型的決策構造。點擊以下鏈接,查看其詳細信息。
Construct | 描述 |
---|---|
cond | 這個結構是用於用於檢查多個測試行動作條件。它可以嵌套if或其他編程語言語句。 |
if | if結構有多種形式。在最簡單的形式,它後麵跟著一個測試條,測試操作和一些其它相應措施(次)。如果測試子句的值為true,那麼測試的動作被執行,否則,由此產生的子句求值。 |
when | 在最簡單的形式,它後麵跟著一個測試條和測試操作。如果測試子句的值為true,那麼測試的動作被執行,否則,由此產生的子句求值。 |
case | 這種結構實現了像cond 構造多個測試行動語句。但是,它會評估的關鍵形式,並允許根據該鍵的形式評價多個行動語句。 |
LISP的cond特殊構造
在LISP語言中cond結構是最常用的,以允許分支。
cond的語法是:
(cond (test1 action1) (test2 action2) ... (testn actionn))
在cond 語句中每個子句包含一個條件測試,並要執行的動作。
如果第一次測試下麵的芯線,為test1,被評估為true,那麼相關的行動的一部分, action1執行,返回它的值,及本子句的其餘部分被跳過。
如果test1的計算結果是nil,然後控製移動到第二個子句,而不執行action1,和相同的流程進行後續處理。
如果冇有試驗條件計算結果為真,那麼cond語句返回nil。
示例
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq a 10) (cond ((> a 20) (format t "~% a is less than 20")) (t (format t "~% value of a is ~d " a)))
當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
value of a is 10
請注意,第二個子句中t保證的是,如果冇有其他的將最後完成的動作。
if結構
如果該宏後跟一個測試子句計算為 t 或nil。如果測試子句計算到t,然後按照測試子句的動作被執行。如果它是零,那麼下一個子句進行評估計算。
if的語法:
(if (test-clause) (<action1) (action2))
示例1
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq a 10) (if (> a 20) (format t "~% a is less than 20")) (format t "~% value of a is ~d " a)
當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
value of a is 10
示例2
if子句後麵可以跟一個可選的then子句:
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq a 10) (if (> a 20) then (format t "~% a is less than 20")) (format t "~% value of a is ~d " a)
當您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
a is less than 20 value of a is 10
示例 3
還可以創建使用if子句的if-then-else類型聲明。
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq a 100) (if (> a 20) (format t "~% a is greater than 20") (format t "~% a is less than 20")) (format t "~% value of a is ~d " a)
當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
a is greater than 20 value of a is 100
when構造,
該when宏,後麵跟著一個測試子句計算為t或為零。如果測試條被評估計算為nil,則任何形式的評估及nil返回,但是它的測試結果為t,則下麵的測試條的動作被執行。
when宏的語法:
(when (test-clause) (<action1) )
示例
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq a 100) (when (> a 20) (format t "~% a is greater than 20")) (format t "~% value of a is ~d " a)
當您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
a is greater than 20 value of a is 100
case構造
case結構實現像cond結構多個測試動作語句。但是,它會評估的鍵形式,並允許根據該鍵的形式評價多個動作語句。
該case宏的語法是:
The template for CASE is:
(case (keyform) ((key1) (action1 action2 ...) ) ((key2) (action1 action2 ...) ) ... ((keyn) (action1 action2 ...) ))
示例
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(setq day 4) (case day (1 (format t "~% Monday")) (2 (format t "~% Tuesday")) (3 (format t "~% Wednesday")) (4 (format t "~% Thursday")) (5 (format t "~% Friday")) (6 (format t "~% Saturday")) (7 (format t "~% Sunday")))
當您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:
Thursday