プログラミング言語I

条件分岐 if, cond

もし ホゲならば
ああしよう
そうでないなら
こうしよう


(if ホゲ ああしよう こうしよう)
					

もし BMI値が25以上ならば
FAT
そうでないなら
FATではない


(if (<= 25 BMIの値) 'FAT 'FATではない)
					

gosh> (if (<= 25 30) 'FAT 'FATではない)
FAT
gosh> (if (<= 25 20) 'FAT 'FATではない)
FATではない

					
体重 80kg , 身長 2m の人のBMI値は calc-bmi
(calc-bmi 80 2)
20
cal-bmiを使ってifで判定するには

(if (<= 25 (calc-bmi 80 2)) 'FAT 'FATではない)

define を使って どんな体重、身長でも判定できる手続きにすればよい

(define hogehoge (lambda (w t)
   (if (<= 25 (calc-bmi w t)) 'FAT 'FATではない))))
					
上では手続き名は hogehoge だけど、皆さんはbmiを判定するんだということがわかるような名前にしないと 再提出にするよ

さらに細かく判定

BMIの値による評価は以下の表に従うとする

評価 BMIの値
slim 18.5未満
standard 18.5以上、25未満
fat1 25以上、30未満
fat2 30以上、35未満
fat3 35以上、40未満
fat4 40以上
https://ja.wikipedia.org/wiki/ボディマス指数 などから作成
BMIの値が
 もし 18.5 未満なら slim そうでなく
    もし 25未満なら standard そうでなく
      もし 30未満なら fat1 そうでなく
        もし35未満なら fat2 そうでなく
           もし 40未満なら fat3 そうでないなら fat4 
        

(if (< x 18.5) 'slim 
   (if (< x 25) 'standard
      (if  (< x 30)  'fat1
         (if (< x 35) 'fat2
            (if (< x 40)  'fat3 'fat4)))))
        

たくさん条件があると 入れ子が深くなってちょっとわかりづらい

スペシャルフォーム

cond


(if (< x 18.5) 'slim 
   (if (< x 25) 'standard
      (if  (< x 30)  'fat1
         (if (< x 35) 'fat2
            (if (< x 40)  'fat3 'fat4)))))
        
条件がだんだん右に移動

(cond ((< x 18.5) 'slim )
      ((< x 25) 'standard)
      ((< x 30) 'fat1)
      ((< x 35) 'fat2)
      ((< x 40) 'fat3)
      (else 'fat4))
条件が揃って分りやすい
(cond ( 条件1 式 ...  式1)
      ( 条件2 式 ...  式2)
      ....                
      ( else  式 ...  式n)
      )
条件1 を評価して #f でなければ 式 ...  式1 を順に評価して 式1の値を返す
 条件1 #fだったら
条件2 を評価して #f でなければ 式 ...  式2 を順に評価して 式2の値を返す
 条件2 #fだったら

同様に条件は幾つでも書くことができる

条件すべてを評価して #f だったら 
else の後の
式 ...  式n を順に評価して 式nの値を返す

推奨

条件が2つに分かれる時 → if

条件が3つ以上の時 → cond