条件分岐は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爆発しろ!なんて言っているのは、この仕様によってエレガントなコードが書けるんですよ。たぶんね。
奇妙な世界へ通じる扉は、あたなのすぐ傍に開いています。次のその扉を開けるのは、あなたなのかもしれません。。。