zoukankan      html  css  js  c++  java
  • 【SICP练习】70 练习2.41

    

    练习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))

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

    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    有个表叫杨表(上)
    Codeforces Round #698 (Div. 2) 题解 全部6题
    Leetcode 821. 字符的最短距离
    gitbook mermaid不能渲染问题
    adb命令启动app及查找系统版本号
    git库使用
    excle转html方法
    gitbook插入视频
    xcode使用技巧
    在 Mac 上的“自动操作”工作流程中使用 Shell 脚本操作
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786149.html
Copyright © 2011-2022 走看看