「Cond」の版間の差分
(ページの作成: ; 構文 : (cond [''(test result ...)'' ...]) ; 機能 : LISP の多分岐条件関数としての機能を果たす。 ; 引数 :* 任意の数のリスト(test result ...)…) |
編集の要約なし |
||
16行目: | 16行目: | ||
; サンプル | ; サンプル | ||
: 次の例では、cond 関数を使用して絶対値の計算を行っている。 | : 次の例では、cond 関数を使用して絶対値の計算を行っている。 | ||
<pre class="brush:autolisp;"> | |||
(cond | (cond | ||
((minusp a) (- a)) | ((minusp a) (- a)) | ||
(t a) | (t a) | ||
) | ) | ||
</pre> | |||
* 変数 a に値 -10 が代入されていると、10 を返す。 | * 変数 a に値 -10 が代入されていると、10 を返す。 | ||
: 次に示すように、cond 関数は多分岐型の関数として使用される。通常は最後の(既定値の)test 式には T を使用する。次に簡単な例を示す。変数 s にユーザが入力した文字列を与えると、cond 関数はその文字列をテストし、Y か y か Y(全角) なら 1 を、N か n か N(全角) なら 0(ゼロ)を、それ以外の場合は nil を返す。 | : 次に示すように、cond 関数は多分岐型の関数として使用される。通常は最後の(既定値の)test 式には T を使用する。次に簡単な例を示す。変数 s にユーザが入力した文字列を与えると、cond 関数はその文字列をテストし、Y か y か Y(全角) なら 1 を、N か n か N(全角) なら 0(ゼロ)を、それ以外の場合は nil を返す。 | ||
<pre class="brush:autolisp;"> | |||
(cond | (cond | ||
((= s "Y") 1) | ((= s "Y") 1) | ||
33行目: | 35行目: | ||
(t nil) | (t nil) | ||
) | ) | ||
</pre> | |||
<pre class="brush:autolisp;"> | |||
; 柔軟な条件処理が行える例 | |||
(cond | |||
((= a b) (princ "\n(a) and (b) are equal")) | |||
((and (= (type a) 'INT) (= (type b) 'INT)) | |||
(princ (strcat "\n(a)+(b)=" (itoa (+ a b))))) | |||
((and (= (type a) 'STR) (= (type b) 'STR)) | |||
(princ (strcat "\n(a)+(b)=" a b))) | |||
((and (listp a) (= (type b) 'SUBR)) | |||
(mapcar '(lambda (x) (princ (b x))) a))) | |||
</pre> | |||
[[Category:AutoLISP]] | [[Category:AutoLISP]] |
2011年1月1日 (土) 09:36時点における版
- 構文
- (cond [(test result ...) ...])
- 機能
- LISP の多分岐条件関数としての機能を果たす。
- 引数
-
- 任意の数のリスト(test result ...)。
- 各リストの先頭の項目を評価し、それが nil 以外の値を返すまで、各リストの先頭項目の評価を続ける。そして、先頭項目の評価結果が nil 以外だったリストの2 番目以降の式を評価する。
- 戻り値
- サブリストの最後の式の値。 サブリストの中に式が 1 つしかない(つまり result が存在しない)場合は、test 式の値を返す。引数が与えられていない場合、cond 関数は nil を返す。
- サンプル
- 次の例では、cond 関数を使用して絶対値の計算を行っている。
(cond ((minusp a) (- a)) (t a) )
* 変数 a に値 -10 が代入されていると、10 を返す。
- 次に示すように、cond 関数は多分岐型の関数として使用される。通常は最後の(既定値の)test 式には T を使用する。次に簡単な例を示す。変数 s にユーザが入力した文字列を与えると、cond 関数はその文字列をテストし、Y か y か Y(全角) なら 1 を、N か n か N(全角) なら 0(ゼロ)を、それ以外の場合は nil を返す。
(cond ((= s "Y") 1) ((= s "y") 1) ((= s "Y") 1) ((= s "N") 0) ((= s "n") 0) ((= s "N") 0) (t nil) )
; 柔軟な条件処理が行える例 (cond ((= a b) (princ "\n(a) and (b) are equal")) ((and (= (type a) 'INT) (= (type b) 'INT)) (princ (strcat "\n(a)+(b)=" (itoa (+ a b))))) ((and (= (type a) 'STR) (= (type b) 'STR)) (princ (strcat "\n(a)+(b)=" a b))) ((and (listp a) (= (type b) 'SUBR)) (mapcar '(lambda (x) (princ (b x))) a)))