条件分岐はifとcondです。

チャ、チャ、チャチャチャ、チャチャチャ、チャチャチャーン。人生には様々な分岐点があります。あの時、チョコではなくバニラを注文していれば。あの時、フォークではなく箸で食べていれば。。そのような経験は誰にでもあるでしょう。今夜もまた奇妙な世界へ足を踏み入れてしまった者たちがいます。もしも人生をやり直せるとしたら。あなたは唐揚げ弁当を選びますか?ハンバーグ弁当を選びますか?


まず紹介するのは、ifです。ifの後に「条件式」「条件を満たすときに評価したい式」「条件を満たさないときに評価したい式」を書きます。


absという絶対値を求める関数がありますが、これを作ってみましょう。my-absという、私のためのabs関数です。abs関数を恋人(二次元を含む)に送りたい人は、your-abs関数にしても構いません。ええ、構いませんとも。

(define (my-abs x)
  (if (< x 0)
      (* x -1)
      x))

(my-abs 5) ;=> 5
(my-abs -5) ;=> 5


他のプログラミング言語と違って、ifは2分岐しかできず、「条件を満たさないときに評価したい式」を省略できないことに注意してください。


では、もっとたくさん分岐したい欲張りなお前は、どうすればいいのでしょうか?そのときは、condを使ってください。cond説明します。cond説明しますが、今説明します。


数字を英語に変換するnum->en関数を書いてみましょう。でも、お前は馬鹿なので、3より大きな数字を知りません。条件に当てはまらないときに評価したい式は、elseに書いてくださいね。

(define (num->en n)
  (cond ((= n 1) "one")
        ((= n 2) "two")
        ((= n 3) "three")
        (else "I don't know.")))

(num->en 3) ;=> "three"
(num->en 5) ;=> "I don't know."


これで、条件分岐の基礎はOKですね。では、複雑な条件をかけたいときはどうするのでしょう。40歳以下で、有名大学卒で、年収1,000万円以上で。。。大丈夫、andとorが使えます。ただし、他のプログラミング言語とチョット違うので注意してくださいね。


andは、引数を左から見て行って、#fが出た時点で#fを返します。#fが出なかった場合は、最後の引数を返します。論よりコード。

(and 1 #f 3) ;=> #f
(and 1 2 3) ;=> 3


orは、引数を左から見て行って、#f以外が出た時点でそれを返します。#fしか出なかった場合は、#fを返します。論よりコード。

(or #f 2 #f) ;=> 2
(or #f #f #f) ;=> #f


誰です?Scheme爆発しろ!なんて言っているのは、この仕様によってエレガントなコードが書けるんですよ。たぶんね。


奇妙な世界へ通じる扉は、あたなのすぐ傍に開いています。次のその扉を開けるのは、あなたなのかもしれません。。。