問題1.3 続き

問題1.3

ってか答え変だな。ずっこい。
sum-of-squaresって使って良いのか?
なんかこの問題を解く上での条件が一切書いてないってことが
どーやら問題だな。


いや、まて、落ち着け。その前に復習しよう。
ぶっちゃけよく分かってないし。。


(define (abs x)
(cond ( (> x 0) x)
( (= x 0) 0)
( (< x 0) (- x))))

(define (abs x)
(cond ( ( < x 0) (- x))
(else x)))

(define (abs x)
(if ( < x 0)
( - x)
x))

この3つは同じなわけで、

「cond」は

cond ((判定1) 結果1)
((判定2) 結果2)

((判定n) 結果n)

cond ((判定1) 結果1)
((判定2) 結果2)

((判定n) 結果n)
((それ以外) 結果)

の2通りあって、マッチする条件が出現した段階でそれ以下の判定はしてくれない。
で、同じことを実現する際に「if」を使うことができるんだけど

if (判定)(真の場合)(偽の場合)
ってなって、返り値部分には式をセットできない。たぶん。
その代わりandとorとnotでごちゃごちゃ条件を細かく指定できる。のかな。
andとorとnotって同時に使えるのかな。



試すか。
condで使えるかどうかチェック→使えない。なんかエラーがでるわ。
ifで使うんだよね。→使えてるけど。エラーっぽいのが出る。


(define (test x)
(if (and (< x 100)(> x 50))
x 10))

(test 53)
=> 53
(test 123)
=> 10

で、あらためて問題を見る。
「3つの引数を渡すと一番小さい数を除いた2つの変数を2乗して、その和を返す式を作れ。」
って言ってるとしか思えない。
だから答えにあった「sum-of-squares」ってのは確かに見たことある手続きだけど
定義しろって書いてないから使わないんじゃないかと。
こーゆうところで時間かけてると先に進めない気もするが、納得いかねぇからやるっきゃねぇよな。和田さん。

んで、変数の使い方は習ってないからやっぱりcondとかifとかandとかorとかnotを使って解けって言ってる。気がする。
電話で和田さんに聞いたらやっぱりcond使ってやるべきだって言ってた。言ってない。

んー。


(define (test x y z)
(cond ((< x y) (if (and (< わかんね しらね))))

あ〜わかんね。なんなのこの問題。いきなり難しい。condとifは同時に使えるのか?
動かして試して覚えてねってことかな。
とりあえずオレにとって難しすぎる。

ばかばかばかばか

なので、できるとこからやります。

まず
「2つの引数を渡すと小さいほうの数を返す式を作れ。」を作る。


(define (test a b)
(cond ((< a b) a)
((= a b) a)
(else b)))

(test 1 2)
=> 1
(test 5 2)
=> 2
(test 5 5)
=> 5

おし。同じ数だったら最初の引数を返すって条件は後付けだけど。
このくらいならできるなぁ。ずっとこのくらいが良いなぁ。無理だなぁ。

んで次。引数3つにしようかな。できるかな。できるか。
「3つの引数を渡すと一番小さい数を返す式を作れ。」を作る。


(define (test a b c)
(cond (< a b) だからできねっつの))
else ifはどうした!!なぜ伝授しない!!
もうcondとか知らねぇよ。

・・・。


・・もしかして自分で探れってことかな。


というかPCやりすぎて嫁さんに怒られました。

あー気になる。てか先進めねぇし。なんなの。