• 【SICP练习】38 练习1.43


    

    练习1.43

    我不想一开始就将结果贴出啦,而是通过叙述自己的思考来完成这篇博客。上一题中我在纸上写下传入2个过程并返回1个过程,事实证明挺有效的,于是这次我也依旧这么做了。

    repeated需要传入一个过程和一个数字,这个数字决定了这个过程的执行次数。repeated还要返回1个过程,而这个过程又要传入一个数字,这个数字又将通过前面传入的过程来运算。确实挺绕的。

    一开始对于决定这个过程的执行次数这一部分,我想参照练习1.41,还define了一个过程。但不知道怎么把这个过程写入repeated中。于是我将这个过程按如下格式写入repeated中了,编译器报错说这种形式非法。

    (define repeated

    (define r

            (lambda (x)

                ......

    (lambda ......

    而后我不再企图单独列出这个要让过程执行多次的部分,而是先暂时将问题简单化。即便是只能做一个唯一的普通的运算也好。

    (define repeated

        (lambda (f a)

            (lambda (b)

                (if (= a 2)

                   (f (f b))

                   (f b)))))

    测试一下。

    ((repeated square 2) 5)

    ;Value: 625

    接下来就该来个递归了是不是。

    在这里我还试过一次在define的过程里又define了一个过程,再次报错。终于博主决定将他们分开写了。

    (define repeated-iter

        (lambda (f a)

            (lambda (b)

                 (if (= a 1)

                    (f b)

                    ((repeated-iter f (- a 1)) (fb))))))

    (define repeated

            (lambda (f a)

                (lambda (b)

                    ((repeated-iter f a) b))))

    接下来我们来测试一下,这回事真正的测试了。

    ((repeated square 5) 5)

    ;Value: 23283064365386962890625

    这里我只是挑了一个比较大的数来展示,其为(square(square (square (square (square 5)))))

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

  • 相关阅读:
    初识NuGet
    NHibernate之映射文件配置说
    NHibernate 数据查询之QueryOver<T>
    一、NHibernate配置所支持的属性
    javascript forEach无法break,使用every代替
    missing ) after argument list
    数组分组chunk的一种写法
    call和apply第一个参数为null/undefined,函数this指向全局对象
    apply的理解和数组降维
    javascript push 和 concat 的区别
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786181.html
Copyright © 2020-2023  润新知