Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

Emacs Lisp: 関数について  andとorを使ってみる

and と or

Emacs Lisp メモ

;; 引数がリストかどうかを評価
(defun listp (x)
  (or (null x)
      (consp x)))

(setq kin '(a b c d))

(listp kin)         ; => t


閏年計算をandとorで書いてみる。
4で割り切れたら閏年
ただし100で割り切れたら普通の年
もし100で割り切れたとしても、400で割り切れたら閏年

(defun leap (n)
  (cond
   ((and (= (% n 4) 0)
         (or (= (% n 400) 0)
             (/= (% n 100) 0)))
    t)
   (t nil)))

(leap 2012)  ;; => t

さらに簡略すると・・・・
こうなります。

(defun leap (n)
  (and (= (% n 4) 0)
        (or (= (% n 400) 0)
            (/= (% n 100) 0))))

(leap 2012)
関数定義の秘訣
- condを使って処理を書く
- その後に、簡略できそうなら簡略する
- 簡略するときはandとorを活用する。