by shigemk2

当面は技術的なことしか書かない

リスト遊び 3-2 条件分岐

前回
リスト遊び 3-1 関数定義 - by shigemk2

条件分岐にはcondという特殊関数を使う。condは、次のように本体に1つ以上のリストを
取る。

(cond
  (条件式1 式1a 式1b ....)
  (条件式2 式2a 式2b ....)
  (条件式3 式3a 式3b ....)
  ...
)

条件式を先頭から順に評価していき、真となる条件式を
発見すると、その条件式に対応する残りの式群を評価し、終了する。
condが返す値は、式群のうち、最後に評価された式の値となる。
真になる条件式が見つからない場合は、nilを返す。

(defun Consp (x)
  (cond
   ((atom x) nil)
   (t t)))
=>Consp
(Consp 5)
=>nil
(Consp '(1 nil))
=>t

;; 新しく関数を定義してみるというか、condは必要ない。
(defun Consp (x)
  (null (atom x)))
=>Consp
(Consp 5)
=>nil
(Consp '('hoge nil))
=>t

(defun Listp (x)
  (cond
   ((null x) t)
   ((consp x) t)
   (t nil)))
=>Listp
;; アトムならnil
(Listp 5)
=> nil
;; リストならt
(Listp '('hoge nil))
=>t
;; ただのアトムならnil
(Listp 'hoge)
=>nil
nil なら t
(Listp nil)
=>t

というかたちになる。