入門編/分岐

Last-modified: 2017-05-08 (月) 13:33:09

条件に応じて異なった処理をさせたい場合には if 特殊フォームや cond 特殊フォーム や case 特殊フォーム や when 特殊フォーム や unless 特殊フォームなどを使います。

; 年齢 age が20歳未満なら「Young.」、そうでなければ「Old.」と表示する。
(setq age ~)
(printf "%s"
  (if (lessp age 20) "Young." "Old.")
)
; このようにもできます。
(if (lessp age 20)
  (printf "%s" "Young.")
  (printf "%s" "Old.")
)
; 年齢が17歳以上23歳以下の場合には「arahata」、年齢が27歳以上33歳以下の場合には「arasaa」、
; 年齢が37歳以上43歳以下の場合には「arafou」、年齢が47歳以上53歳以下の場合には「arafifu」、
; 年齢が57歳以上63歳以下の場合には「arakan」、年齢が67歳以上73歳以下の場合には「arakoki」、
; それ以外の年齢の場合には「no special name」と表示する。
(printf "%s"
  (if (and (geqp 17 age) (leqp age 23)) "arahata"
  (if (and (geqp 27 age) (leqp age 33)) "arasaa"
  (if (and (geqp 37 age) (leqp age 43)) "arafou"
  (if (and (geqp 47 age) (leqp age 53)) "arafifu"
  (if (and (geqp 57 age) (leqp age 63)) "arakan"
  (if (and (geqp 67 age) (leqp age 73)) "arakoki"
  "no special name"
  ))))))
)
; または
(printf "%s"
  (cond
    ((and (geqp 17 age) (leqp age 23)) "arahata")
    ((and (geqp 27 age) (leqp age 33)) "arasaa")
    ((and (geqp 37 age) (leqp age 43)) "arafou")
    ((and (geqp 47 age) (leqp age 53)) "arafifu")
    ((and (geqp 57 age) (leqp age 63)) "arakan")
    ((and (geqp 67 age) (leqp age 73)) "arakoki")
    (t "no special name")
  )
)
; 都道府県名が "Tokyo" の場合には "to"、"Hokkai" の場合には "do"、
; "Kyoto" と "Osaka" の場合には "fu"、それ以外の場合には "ken"
; と表示する。
(setq prefecture "~")
(printf "%s"
  (case prefecture
    (("Tokyo") "to")
    (("Hokkai") "do")
    (("Kyoto" "Osaka") "fu")
    (t "ken")
  )
)
; このようにもできます。
(case prefecture
  (("Tokyo") (printf "%s" "to"))
  (("Hokkai") (printf "%s" "do"))
  (("Kyoto" "Osaka") (printf "%s" "fu"))
  (t (printf "%s" "ken"))
)
; 年齢が20歳未満の場合にだけ「Too youth.」と表示して、
; 開いてあったファイル file を閉じ、システムを終了させる。
; age<20 であれば… (肯定的な条件分岐)
(when (lessp age 20)
  (printf "%s" "Too youth.")
  (close file)
  (exit)
)
; age≧20 でなければ… (否定的な条件分岐)
(unless (geqp age 20)
  (printf "%s" "Too youth.")
  (close file)
  (exit)
)