2010年2月4日木曜日

SICP 練習問題 1.1〜1.5

昨日夜更かししてやった、練習問題1.1〜1.5を一挙掲載だ。
とにかくアップだ。

;------------------------------
; 1.1
10
;;-> 10

(+ 5 3 4)
;; -> 12

(- 9 1)
;;-> 8

(/ 6 2)
;;-> 8

(+ (* 2 4) (- 4 6)) 
;;-> 6

(define a 3)
;;-> a

(define b (+ a 1))
;;-> b

(+ a b (* a b))
;;-> 19

(= a b)
;;-> #f

(if (and (> b a) (< b (* a b)))
    b
    a)
;;-> 4

(cond ((= a 4) 6)
      ((= b 4) (+ 6 7 a))
      (else 25))
;;-> 16

(+ 2 (if (> b a) b a))
;;-> 6

(* (cond ((> a b) a)
  ((< a b) b)
  (else -1))
   (+ a 1))
;;-> 16


;------------------------------
; 1.2
; 5 + 4 + (2 - (3 - (6 + 4/5)))
;ーーーーーーーーーーーーーーーーー
;       3(6 - 2)(2 - 7)
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5) )))) (* 3 (- 6 2) (- 2 7)))


;------------------------------
; 1.3
(define (squre x)
  (* x x))

(define (larger2-squre-sum . values)
  (let ((lis (reverse (sort values))))
    (+ (squre (car lis)) (squre (cadr lis)))))
    

;------------------------------
; 1.4
(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
;-> if で、手続き「+」または「-」を返却している。


;------------------------------
; 1.5
(define (p)
  (p))

(define (test x y)
  (if (= x 0)
      0
      y))
;-> (test 0 (p))を評価すると、まず第2引数の(p)が評価される。
;   pは内部で再帰的にpを呼び出すが停止条件がないため、処理が戻ってこなくなる。



今んとこ、得に疑問点とか問題点はない。と思う。

0 件のコメント:

コメントを投稿