2008/12/17

【Scheme】問題1.3@SICP【Lisp】

問題1.3
3つの数を引数に取りその中の大きいもの二つの平方の和を返す手続きを定義せよ。


:再帰でいってみよー
(define (square x)
  (* x x))

(define (sum-of-bigpair a b c)
  (if (and (< a b)(< a c))
    ;(+ (* b b)(* c c))
    (+ (square b)(square c))
    (sum-of-bigpair b c a)))

(sum-of-bigpair 1 2 3) ; => 13
(sum-of-bigpair 5 6 2) ; => 61
(sum-of-bigpair -1 -2 -3) ; => 5


絶対もっとスマートな解があるだろ。
でも、ここまでで出てきたのは関数定義と条件分岐だけだし・・・
あー、あとandとorか。(論理和、論理積)
馬鹿正直に書いたらif文で書くことになる^^;
(最初、まんまとif文で書いた)
解答を探してみたら、こんなページ発見。
いろんな考え方があるんだねー。考え方がわかりやすく書いてあっておもしろい><

こういう解答をSICPにも載せてくれりゃーいいのに。
SICP練習問題1.1~1.3
http://blog.ajiyoshi.org/Entry/275/


>全部足してから一番小さいのだけ引く
とか、なるほど。

0 件のコメント:

コメントを投稿