LISP - 決策

決策結構需要程序員指定一個或多個條件由程序進行評估或測試,以及要執行的語句或語句如果條件被確定爲true,如果條件被確定爲false那麼選擇要執行其他語句。

下面是在大多數編程語言中一個典型的決策結構的一般形式爲:

Decision

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