码迷,mamicode.com
首页 > 其他好文 > 详细

【SICP练习】70 练习2.41

时间:2015-02-23 09:47:06      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:sicp



练习2.41

这道题其实就是书中素数示例的变种,其本质是一样的。因此我们也按照同样的次序来完成这个过程。首先第一步,我们来完成生成3个相异整数构成的三元组。但在上一题中我们已经写出了能够产生2个相异整数构成的二元组了。因此我们只要多产生一个i,让其与产生的二元组结合,便能产生三元组了。那么,开工吧。

(define (unique-triples n)

   (flatmap (lambda (i)

                (map (lambda (j)

                         (cons i j))

                      (unique-pairs (- i 1))))

              (enumerate-interval 1 n)))

然后还需要定义一个谓词来判断这个三元组的三元素之和是否等于s。书中的例子也有一个prime-sum?谓词不是吗。

(define (triples-sum? triples s)

   (= s (+ (car triples)

           (cadr triples)

           (caddr triples))))

通过查询资料发现还有读者作出了一个巧妙地过程。

(define (triples-sum? triples s)

   (= sum (fold-right + 0 triples)))

真的是活学活用啊。

然后还需要一个能够过滤掉不符合条件的三元组的函数。

(define (filter-triples s triples)

  (filter (lambda (x)

             (triples-sum? x s))

        triples))

因此便能产生如题中描述的那般函数了。

【SICP练习】70 练习2.41

标签:sicp

原文地址:http://blog.csdn.net/nomasp/article/details/43907429

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!