这道练习的中文版翻译有误,原文是『...Write a procedure that computes elements of Pascal’s triangle by means of a recursive process.』,译文只翻译了『。。。它采用递归计算过程计算出帕斯卡三角形。』,这里应该是『帕斯卡三角形的各个元素』才对。
在SICP解题集中,作者分别展示了用递归计算过程和迭代计算过程来求出一个值的过程,该值是帕斯卡三角形第row行的第col个元素的数值,过程接收row和col两个参数。
我自己的想法是,我希望写出一个过程,它接收一个正整数,求值出一个n个元素的表,表的第x(1 <= x <= n)个元素是帕斯卡三角形第x层的元素表。
于是我首先define一个过程,把它命名为pasika(没错,就是帕斯卡的拼音哈哈),它接收形参n,求值出1~n层的帕斯卡三角形,并将它们按递增顺序装入一个表中。
为了实现它,我用“按愿望思维”的策略。
我先假定有那么一个中间过程pasika-n-list,它接收形参N,求值出帕斯卡三角形的第N层的所有数值,并组成一个表;
然后我又假定有一个过程pasika-list,它接收形参a和b,返回帕斯卡三角形从a层到b层元素表的表。如此一来过程pasika就可以这样定义:
(define (pasika n)
(pasika-list 1 n))
然后pasika-list过程也可以这样定义: