Auto Lisp 快速上手 - 008

  • Share this:

Conditionals 條件函數

(=)

不是指定的指令 , 只有 (setq) 才是 . (=) 指令只用來測試各項目是否相等 . 它不是用在指定某變數的值等於某變數或某數值的 .

if

(if) 是標準的 if-then-else statement. 在 AutoLISP 裡 , 只能寫一項 if statement 和一項 then statement. 例如 :

(if (= a b)

(setq b 5)

(setq b 6)

)

If 如果 a 等於 b , then 則 b 將被指定其變數值為 5 . If 如果 不相等 , then 則 b 將被指定其變數值為 6 .

Cond (Conditional) 多條件函數

此函數接受任意數量的 list 做為 argument. 它會依序評估每一 list 的第一個項目 , 直到找到一個條件式的值不是 nil 的為止 .

例如 : 假設 user 的回應文字為變數 variable s ,

(cond

((= s "Y") 1)

((= s "y") 1)

((= s "N") 0)

((= s "n") 0)

(t nil)

)

此函數測試回應文字的變數 , 如果其值為 "Y" 或 "y" , 則回傳 1 ; 如果是 "N" 或 "n" , 則回傳 0 ; 如果回應的文字為其它的文字 , 則回傳 nil .

Repeat

類似廻圈的指令 , 依所指定的次數來執行其內部工作 . 例 :

(setq a 10)

(setq b 100)

(repeat 4

(setq a (+ a 10))

(setq b (+ b 10))

)

Returns 140 .

While

另一個巢狀廻圈的常用控制指令 . 如果要重複執行指令,巢狀廻圈的功能是非常重要的 . 無論如何 , 除非你有方法控制它 , 否則此程式將會永遠的重複執行廻圈內的工作,而看起來像是當機一般---没有任何反應 . eg:

(setq a "w")

首先必須設定一個非 nil 的變數值 .

(while a

當 a 值存在 , 不為 nil 的時候 , 則重複執行以下的廻圈指令 .

(xxxx)

(xxxx) 在此指廻圈中所要執行的指令 , 可以是多個指令 .

(if (= c d) (setq a nil))

在廻圈內的指令中 , 必須有類似這樣的控制廻圈執行或結束的指令 . 此例是設定當變數 c 和變數 d 的值相同時 , 則設變數 a 的值為 nil. 如此 , 才能令廻圈結束 .

)

當廻圈結束後 , 將繼續執行其後的指令 .


Tags: