Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2007-04-25

CADRでSICP 1.3

| 00:15 | CADRでSICP 1.3 - わだばLisperになる を含むブックマーク はてなブックマーク - CADRでSICP 1.3 - わだばLisperになる

CADRでSICP Exercise 1.3.に挑戦 - Structure and Interpretation of Computer Programs

Exercise 1.3
3つの数のうち、大きい方2つの自乗の和を返す手続きを
つくれ。
解答
(defun sum-square-largest-2 (x y z)
  (if (and (<= x y) (<= x z))
      (+ (* y y) (* z z))
    (sum-square-largest-2 y z x)))

(defun sum-square-largest-2 (x y z)
  (cond ((and (<= x y) (<= x z))
	 (+ (* y y) (* z z)))
	((and (<= y z) (<= y z))
	 (+ (* z z) (* x x)))
	((and (<= z x) (<= z y))
	 (+ (* x x) (* y y)))))

偶々回答の前にJoe Marshall氏の小ネタ(日本語訳)を見てしまったため、

逆に普通の答え方の方がややこしく感じられるという罠。

(defun min-of-3 (x y z)
  (if (and (<= x y) (<= x z))
      x
    (min-of-3 y z x)))

の変形として捉えたってことなのかしらん。