zoukankan      html  css  js  c++  java
  • 【SICP练习】117 练习3.44

    练习3-44

    原文

    Exercise 3.44. Consider the problem of transferring an amount from one account to another. Ben Bitdiddle claims that this can be accomplished with the following procedure, even if there are multiple people concurrently transferring money among multiple accounts, using any account mechanism that serializes deposit and withdrawal transactions, for example, the version of make-account in the text above.

    (define (transfer from-account to-account amount) 
        ((from-account 'withdraw) amount)  
        ((to-account 'deposit) amount))

    Louis Reasoner claims that there is a problem here, and that we need to use a more sophisticated method, such as the one required for dealing with the exchange problem. Is Louis right? If not, what is the essential difference between the transfer problem and the exchange problem? (You should assume that the balance in from-account is at least amount.)

    分析

    题目中的transfer和第214页的exchange有一个很大的区别,前者不仅仅是计算余额的增减,还要计算它们的差值(difference),而在transfer中则不需要,只有一个amount,并且这个amount只是在每次进行增减余额之后更新。

    transfer中,((from-account ‘withdraw) amount)和((to-account ‘deposit) amount)都已经进行了串行化因此都会逐个正确执行。但是在一方减少余额之后,另一方增加余额与其他的操作的先后顺序则不能肯定。但增减余额这两个操作都能始终被执行。



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


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


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

  • 相关阅读:
    linux下文件编码转换
    linux下打开文件数
    从hive0.7.1升级到hive0.8.1
    hive使用过程中碰到的问题
    JVM和GC
    代码生成器开发设计
    开源代码生成器:SmartCode [转]
    byte与其他类型的转换
    测试版天思.net代码生成器
    [源码试]写xml的解析器
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786084.html
Copyright © 2011-2022 走看看