SICPを読む(4) 問題1.2 - 1.5

問題1.2

(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
  (* 3 (- 6 2) (- 2 7))) ; -37/150

4/5でもOK。

問題1.3

(define (square-3 x y z)
 (if (> x y)
  (sum-of-squares x (if (> y z) y z))
  (sum-of-squares y (if (> z x) z x))))
(square-3 2 3 2)

アンサーブックを見たら問題を読み間違えてたので、修正。

問題1.4

(define (a-plus-abs-b a b)
 ((if (> b 0) + -) a b))
(a-plus-abs-b 1 -2) ; 3

面白い。振舞いをを変更出来てしまう。

問題1.5

(define (p) (p))
(define (test x y)
 (if (= x y) 0 y))
(test 0 (p))

Schemeは作用的順序なので、無限ループ。

(test 0 (p))
; ->0を評価->(test 0 (p))
; ->pを評価->(test 0 (p))
; ->pを評価->(test 0 (p))...

つまり、"引数の中"を先に評価する。括弧の中ではないらしい。

OSS WEB|SICP|ex-1.5