(defun D (a b c) (- (* b b) (* 4 a c)))
(defun real-solution (a b c) (cond ((> (D a b c) 0) ;もし、D>0なら、 2) ((= (D a b c) 0) ;D=0なら、 1) (t ;それ以外(D<0)なら、 0)))
(defun divide (x y) (cond ((= (mod x y) 0) ;もし、xがyで割り切れるなら、 (/ x y)) (t ;それ以外(割り切れない)なら、 (list (/ (- x (mod x y)) y) (mod x y))) ))
第2回の課題に必要な関数
CommonLispには、単純な条件分岐を行うifという関数もありますが、より一般的な関数としてcondがあります。※実行部には複数の命令を書くことができます。
(cond (条件1 実行部1)(条件2 実行部2) ...(条件n 実行部n))
※条件2をチェックする時には、「条件1以外の場合で」ということが前提となっています。
※条件部の最後には、「それ以外の場合」に相当する t を書くことができます。
※cond関数の値としては、該当した条件の実行部の最後の値を返します。条件部には、例えば、次のような論理関数を用います。
※n1, n2は数に限ります。x, yは任意のアトムまたはリストです。
命令の基本形 関数の結果 使い方の例 結 果 (> n1 n2) n1 > n2 か? (> 5 4) t [真] (< n1 n2) n1 < n2 か? (< 5 4) nil (= n1 n2) n1 = n2 か? (= 5 6) nil (atom x) x は、アトムか? (atom 'A),(atom '(A)) t[真],nil (null x) x は、nil か? (null 'A),(null nil) nil ,t[真] (equal x y) x と yは同じか? (equal 'A 'B),(equal '(P) '(P)) nil ,t[真]