; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 02/25/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================
;; SICP No.1.12
;; 输入参数x为行数,y为列数,从1开始计数
;; 非法参数返回值为0
(define (pascal-triangle x y)
(cond ((or (> 0 y) (< x y)) 0)
((or (= y 1) (= x y)) 1)
(else (+ (pascal-triangle (- x 1) (- y 1))
(pascal-triangle (- x 1) y)))))
;; 另一个iterative process的解法
(define (pascal-triangle-i x y)
(define (p-iter a b v)
(if (= b 0)
v
(p-iter (- a 1) (- b 1) (* v (/ a b)))))
(p-iter (- x 1) (- y 1) 1))
;; Test-it
;;
;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.
;; > (pascal-triangle 5 3)
;; 6
;; > (pascal-triangle 6 4)
;; 10
;; > (pascal-triangle 3 4)
;; 0
;;
;; > (pascal-triangle-i 5 3)
;; 6
;; > (pascal-triangle-i 6 4)
;; 10
;; > (pascal-triangle-i 3 4)
;; 0