決策結(jié)構(gòu)需要程序員指定一個(gè)或多個(gè)條件由程序進(jìn)行評(píng)估或測(cè)試,以及要執(zhí)行的語(yǔ)句或語(yǔ)句如果條件被確定為true,如果條件被確定為false那么選擇要執(zhí)行其他語(yǔ)句。
下面是在大多數(shù)編程語(yǔ)言中一個(gè)典型的決策結(jié)構(gòu)的一般形式為:
LISP提供了以下類型的決策構(gòu)造。點(diǎn)擊以下鏈接,查看其詳細(xì)信息。
Construct | 描述 |
---|---|
cond | 這個(gè)結(jié)構(gòu)是用于用于檢查多個(gè)測(cè)試行動(dòng)作條件。它可以嵌套if或其他編程語(yǔ)言語(yǔ)句。 |
if | if結(jié)構(gòu)有多種形式。在最簡(jiǎn)單的形式,它后面跟著一個(gè)測(cè)試條,測(cè)試操作和一些其它相應(yīng)措施(次)。如果測(cè)試子句的值為true,那么測(cè)試的動(dòng)作被執(zhí)行,否則,由此產(chǎn)生的子句求值。 |
when | 在最簡(jiǎn)單的形式,它后面跟著一個(gè)測(cè)試條和測(cè)試操作。如果測(cè)試子句的值為true,那么測(cè)試的動(dòng)作被執(zhí)行,否則,由此產(chǎn)生的子句求值。 |
case | 這種結(jié)構(gòu)實(shí)現(xiàn)了像cond 構(gòu)造多個(gè)測(cè)試行動(dòng)語(yǔ)句。但是,它會(huì)評(píng)估的關(guān)鍵形式,并允許根據(jù)該鍵的形式評(píng)價(jià)多個(gè)行動(dòng)語(yǔ)句。 |
在LISP語(yǔ)言中cond結(jié)構(gòu)是最常用的,以允許分支。
cond的語(yǔ)法是:
(cond (test1 action1) (test2 action2) ... (testn actionn))
在cond 語(yǔ)句中每個(gè)子句包含一個(gè)條件測(cè)試,并要執(zhí)行的動(dòng)作。
如果第一次測(cè)試下面的芯線,為test1,被評(píng)估為true,那么相關(guān)的行動(dòng)的一部分, action1執(zhí)行,返回它的值,及本子句的其余部分被跳過(guò)。
如果test1的計(jì)算結(jié)果是nil,然后控制移動(dòng)到第二個(gè)子句,而不執(zhí)行action1,和相同的流程進(jìn)行后續(xù)處理。
如果沒(méi)有試驗(yàn)條件計(jì)算結(jié)果為真,那么cond語(yǔ)句返回nil。
示例
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(setq a 10) (cond ((> a 20) (format t "~% a is less than 20")) (t (format t "~% value of a is ~d " a)))
當(dāng)單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
value of a is 10
請(qǐng)注意,第二個(gè)子句中t保證的是,如果沒(méi)有其他的將最后完成的動(dòng)作。
如果該宏后跟一個(gè)測(cè)試子句計(jì)算為 t 或nil。如果測(cè)試子句計(jì)算到t,然后按照測(cè)試子句的動(dòng)作被執(zhí)行。如果它是零,那么下一個(gè)子句進(jìn)行評(píng)估計(jì)算。
if的語(yǔ)法:
(if (test-clause) (<action1) (action2))
示例1
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(setq a 10) (if (> a 20) (format t "~% a is less than 20")) (format t "~% value of a is ~d " a)
當(dāng)單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
value of a is 10
示例2
if子句后面可以跟一個(gè)可選的then子句:
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(setq a 10) (if (> a 20) then (format t "~% a is less than 20")) (format t "~% value of a is ~d " a)
當(dāng)您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
a is less than 20 value of a is 10
示例 3
還可以創(chuàng)建使用if子句的if-then-else類型聲明。
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(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)
當(dāng)單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
a is greater than 20 value of a is 100
when構(gòu)造,
該when宏,后面跟著一個(gè)測(cè)試子句計(jì)算為t或?yàn)榱?。如果測(cè)試條被評(píng)估計(jì)算為nil,則任何形式的評(píng)估及nil返回,但是它的測(cè)試結(jié)果為t,則下面的測(cè)試條的動(dòng)作被執(zhí)行。
when宏的語(yǔ)法:
(when (test-clause) (<action1) )
示例
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(setq a 100) (when (> a 20) (format t "~% a is greater than 20")) (format t "~% value of a is ~d " a)
當(dāng)您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
a is greater than 20 value of a is 100
case構(gòu)造
case結(jié)構(gòu)實(shí)現(xiàn)像cond結(jié)構(gòu)多個(gè)測(cè)試動(dòng)作語(yǔ)句。但是,它會(huì)評(píng)估的鍵形式,并允許根據(jù)該鍵的形式評(píng)價(jià)多個(gè)動(dòng)作語(yǔ)句。
該case宏的語(yǔ)法是:
The template for CASE is:
(case (keyform) ((key1) (action1 action2 ...) ) ((key2) (action1 action2 ...) ) ... ((keyn) (action1 action2 ...) ))
示例
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(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")))
當(dāng)您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:
Thursday