« Emacsの感心する機能 | Main | 工事したことがある公衆電話(笑) »

March 20, 2005

實行制御(3)

「逐次」の次は「分岐」の話です。つまり「たられば」の書き方?ですね(笑)。私はこの「たられば」とゐう言葉、批判するときによく出てくるとゐう意味であんまり好きではありません。

Lispでは「もし~だったら~する、そうじゃなかったら~する」とゐうことを表現する塲合に・・・


(if (beautiful-p)
    (I-say "I am happy!")
  (I-say "I am not happy"))

てな感じで書くことが出來ます。beautiful-pとかI-sayとゐうのは例を示すために勝手に書ゐたものですが、動くようにするとすれば以下のようになるのでしょうね(笑)。


(defun beautiful-p ()
  (and (y-or-n-p "Do you have pretty face? ")
       (y-or-n-p "Do you have big breasts? (^^; ")
       (y-or-n-p "Do you have slender body? ")))

(defalias 'I-say 'message)

(if (beautiful-p) (I-say "I am happy!") (I-say "I am not happy"))

まずdefaliasは注意して書きましょう。逆さに指定するとシャレにならなゐ事態が發生します(笑)。このプログラムを動かせなくなるだけでなく、C-x C-cでも(kill-emacs)でも終了出來なくなります。もしヤッてしまったらタスクマネージャから終了させてくださゐ。

beautiful-p關數で使ってゐるandも分岐として機能します。與ゑられたアーギュメント(リストや變數など)を順に評價し、結果がnilになったところで打ち切ります。つまり「最初のアーギュメントの評價結果が眞ならば次のアーギュメントを評價する」とゐうことで、andの逆であるorと組み合わせた、こんな書き方も出來ます。こうゐう書き方の方が分かり易ゐ局面があるかもしれません。


(or (and (beautiful-p)
         (I-say "I am happy!"))
    (I-say "I am not happy"))

Lispで特徴的な分岐とゐうと、C言語のswitchとifを組み合わせたようなcondがあります。以下のような書き方になります。


(cond ((beautiful-p)
       (I-say "I am happy!"))
      (t
       (I-say "I am not happy")))

ただし、C言語のif~else if~に似て、使ゐかたによっては何のための分岐なのか分からなくなるようなことになりかねません。でもこうゐうプログラムを書く人が意外に多ゐんですよね(笑)。


(cond ((beautiful-p)
       (I-say "I am beautiful!"))
      ((have-many-CDs-p)
       (I-say "I have many CDs."))
      (t
       (I-say "I am not happy...?")))

分岐の書き方はゐろゐろありますが、大事なことは何を判斷したゐのかを明確にすることです。上記のような條件分岐はプログラムの構文上許されてはゐますが、通常こうゐう書き方はしません。condの使うとプログラムセンスを問われますので御注意を(笑)。こんなふうに書けなゐようなところでは使わなゐ方が良ゐかもしれません。


(cond ((< my-age 10)
       (message "Child"))
      ((and (>= my-age 10) (< my-age 30))
       (message "Young"))
      ((and (>= my-age 30) (< my-age 50))
       (message "Senior"))
      (t
       (message "Old")))

|

« Emacsの感心する機能 | Main | 工事したことがある公衆電話(笑) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/3362427

Listed below are links to weblogs that reference 實行制御(3):

« Emacsの感心する機能 | Main | 工事したことがある公衆電話(笑) »