「Cond」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成: ; 構文 : (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)))