鍍金池/ 教程/ Java/ LISP - 決策
LISP - 樹
LISP - 錯(cuò)誤處理
LISP - 謂詞
LISP - 決策
LISP - 變量
LISP - 數(shù)組
LISP - 對(duì)象系統(tǒng)(CLOS)
LISP - 輸入和輸出
Lisp教程
LISP - 數(shù)字
LISP - 循環(huán)
LISP - 常量
LISP - 集合
LISP - 字符
LISP - 程序結(jié)構(gòu)
LISP - 文件I/O
LISP - 哈希表
LISP - 宏
LISP - 數(shù)據(jù)類型
LISP - 包
LISP - 符號(hào)
LISP - 運(yùn)算符
LISP - 基本語(yǔ)法
LISP - 函數(shù)
LISP - 向量
LISP - 結(jié)構(gòu)
LISP - 概述介紹

LISP - 決策

決策結(jié)構(gòu)需要程序員指定一個(gè)或多個(gè)條件由程序進(jìn)行評(píng)估或測(cè)試,以及要執(zhí)行的語(yǔ)句或語(yǔ)句如果條件被確定為true,如果條件被確定為false那么選擇要執(zhí)行其他語(yǔ)句。

下面是在大多數(shù)編程語(yǔ)言中一個(gè)典型的決策結(jié)構(gòu)的一般形式為:

Decision making constructs

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的cond特殊構(gòu)造

在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)作。

if結(jié)構(gòu)

如果該宏后跟一個(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