問題1.3 続き
問題1.3
ってか答え変だな。ずっこい。
sum-of-squaresって使って良いのか?
なんかこの問題を解く上での条件が一切書いてないってことが
どーやら問題だな。
いや、まて、落ち着け。その前に復習しよう。
ぶっちゃけよく分かってないし。。
この3つは同じなわけで、
(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))
「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つの引数を渡すと一番小さい数を返す式を作れ。」を作る。
else ifはどうした!!なぜ伝授しない!!
(define (test a b c)
(cond (< a b) だからできねっつの))
もうcondとか知らねぇよ。
・・・。
・・もしかして自分で探れってことかな。
というかPCやりすぎて嫁さんに怒られました。
あー気になる。てか先進めねぇし。なんなの。