• 【SICP练习】103 练习2.81-2.97


    练习2-81

    这里再次需要用到第186页的创建表格部分内容。当然了现在完全可以只是将make-table加载到这道题中。还有我们前面几题中用到的apply-generic。

    a)
    载入 Louis 的强制过程后,对两个复数调用exp会出现解释器假死的情况。

    b)
    Louis并没有纠正该问题,反而会让程序进入无限循环之中。

    c)
    解决这个错误的办法就是让apply-generic能够在其两个输入的参数的类型相同时让强制转换停止下来。

    (define (apply-generic op . args)
        (let ((type-tags (map type-tag args)))
            (let ((proc (get op type-tags)))
                (if proc
                    (apply proc (map contents args))
                    (if (= (length args) 2)
                        (let ((type1 (car type-tags))
                              (type2 (cadr type-tags))
                              (a1 (car args))
                              (a2 (cadr args)))
                            (if (equal? type1 type2)  
                              (error "No method for these types" (list op type-tags)) 
                                (let ((t1->t2 (get-coercion type1 type2))
                                      (t2->t1 (get-coercion type2 type1)))
                                    (cond (t1->t2
                                            (apply-generic op (t1->t2 a1) a2))
                                          (t2->t1
                                            (apply-generic op a1 (t2->t1 a2)))
                                          (else
                                            (error "No method for these types"
                                                    (list op type-tags)))))))
                        (error "No method for these types"
                                (list op type-tags)))))))

    抱歉:剩余部分待完成。



    感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


    为使本文得到斧正和提问,转载请注明出处:
    http://blog.csdn.net/nomasp


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

  • 相关阅读:
    extjs数据类型
    Extjs 动态控制列显示
    400
    extjs主单清单同时编辑提交
    js-map模拟
    Leetcode 407.接雨水
    Leetcode 406.根据身高重建队列
    Leetcode 405.数字转化为十六进制数
    Leetcode 402.移掉k位数字
    Leetcode 401.二进制手表
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786116.html
Copyright © 2020-2023  润新知