さよなら問題1.3

問題1.3にセイグッバイ


(define (square x) (* x x))
(define (square_add x y) (+ (square x) (square y)))

(define (test x y z)
(if (< x y)
(cond ( (< x z) (square_add y z))
(else (square_add x y)))
(cond ( (< y z) (square_add x z))
(else (square_add x y)))
)
)

(test 1 2 3)
=> 13
(test 5 2 5)
=> 50
(test 5 5 2)
=> 50

なんで最初の条件は「<」なんだろなーと思ってたら
3つの数字の内一番小さい数字さえ見つけられれば良いからってことに気づいた。
「>」でやっちゃうと一番大きい数を見つける流れになっちゃうんだな。
2度手間だっつーの。あはは。

あ、あはは。

頭良いね、これ解けるって。

・・。

あんときはなぁ〜子供がうるさかったからなぁ〜。
なんか全然集中できなかったしな。



仕組みはどーなってんだ。

使ってるのは


(define (test x y z)
(if (条件1-1)
(cond ( (条件1-2) (結果1))
(else (結果2)))
(cond ( (条件1-3) (結果3))
(else (結果3)))
)
)
xがyより小さい
 →さらにzより小さい→yとzを二乗し、和を返す。
 →zよりは大きい→xとyを二乗し、和を返す。

ん。。条件1-1を満たさない奴はどーなるんだ?
if文って・・。

http://www.haun.org/kent/lisp1/1.html#FLOWPRE


まず条件分岐の雄、if である。

if の書式は

(if P THEN ELSE)

このサイト使えるな。
SICPの関数説明はわかりにくすぎる。

なるほど、2つ目のcondはelseなんだな。
ifの括弧の中にelseまで入ってるとはなぁ。。
わかりにくっ!!

問題1.4


(define (a-plus-abs-b a b)
( (if (> b 0) + -) a b))
これの意味か。よーしよーし。簡単そう。

a-plus-abs-bって関数を定義しますよってことだろ。
引数は2こで、あ、あれ、、+ - な、なにっ
誤植だな。これは。

ん〜。

if文があって、bが0より大きかったら「+」が返って(+ a b)が返却されて、
bが0より小さかったら「-」が返って(- a b)が返却されるってことだな。よしよし。
答えもあってた。簡単ポ。

問題1.5

意味わかんね。