<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    sicp 4.3.3小節習題

    Posted on 2008-11-21 10:26 dennis 閱讀(1553) 評論(0)  編輯  收藏 所屬分類: 計算機科學與基礎

        本節實現了amb求值器,題目都是擴展這個求值器,引入一些特殊的過程。我的嘗試解答從4.51開始
    習題4.51,要求實現permanent-set!,這個過程的副作用在遇到失敗時不撤銷,實現如下:
    ;擴充analyze 
    ((permanent
    -assignment? exp)
             (analyze
    -permanent-assignment exp))

    ;實現

    (define (permanent
    -assignment? exp)
      (tagged
    -list? exp 'permanent-set!))
    (define (analyze-permanent-assignment exp)
       (let ((var (assignment
    -variable exp))
            (vproc (analyze (assignment
    -value exp))))
          (
    lambda(env succeed fail)
            (vproc env
                   (
    lambda(val fail2)
                          (set
    -variable-value! var val env) 
                          (succeed 
    'ok fail2))
                   fail))))

    習題4.52,實現if-fail的特殊形式,在第一個表達式如果求值成功,就返回該表達式的值,否則返回第二個表達式的值,實現如下:
    ;擴充analyze
     ((
    if-fail? exp)
             (analyze
    -if-fail exp))
    ;實現
    (define (
    if-fail? exp)
      (tagged
    -list? exp 'if-fail))
    (define (analyze-if-fail exp)
       (let ((pproc (analyze (
    if-predicate exp)))
            (cproc (analyze (
    if-consequent exp))))
         (
    lambda(env succeed fail)
            (pproc env (
    lambda(pred-value fail2)
                         (succeed pred
    -value fail2))
                   (
    lambda() (cproc env succeed fail))))))
    pproc如果執行成功,就返回結果pred-value,否則就執行fail過程(lambda() (cproc env succeed fail)),測試略。

    習題4.53,根據題意可知這個過程返回結果應該是(prime-sum-pair '(1 3 5 8) '(20 35 110))的所有結果,執行也是如此:
    ;;; AMB-Eval value:
    ((
    8 35) (3 110) (3 20))

    習題4.54,將require實現為特殊形式:
    ;擴充analyze
    ((require? exp)
             (analyze
    -require exp))

    ;實現
    (define (require? exp)
      (tagged
    -list? exp 'require))
    (define (require-predicate exp)
      (cadr exp))
    (define (analyze
    -require exp)
      (let ((pproc (analyze (require
    -predicate exp))))
        (
    lambda (env succeed fail)
          (pproc env (
    lambda(pred-value fail2)
                       (
    if (not pred-value)
                           (fail2)
                           (succeed 
    'ok fail2)))
                 fail))))


    主站蜘蛛池模板: 国产亚洲色视频在线| 亚洲综合亚洲国产尤物| 国产偷伦视频免费观看| 亚洲黑人嫩小videos| 国产一卡2卡3卡4卡2021免费观看| 亚洲精品无码你懂的| 亚洲人成人一区二区三区| 中文免费观看视频网站| 色网站在线免费观看| 亚洲福利视频导航| 国产99视频免费精品是看6| 久久一区二区免费播放| 亚洲六月丁香六月婷婷蜜芽 | 免费A级毛片无码A∨免费| 亚洲AV无码一区二区三区性色| 国产精品亚洲а∨无码播放| 天天看免费高清影视| 男女作爱在线播放免费网站| 亚洲中文字幕乱码AV波多JI | 青青免费在线视频| 亚洲国产精品久久久久网站| 国产亚洲福利一区二区免费看| 免费A级毛片无码视频| 无遮挡a级毛片免费看| 亚洲国语在线视频手机在线| 国产乱辈通伦影片在线播放亚洲 | 野花高清在线观看免费完整版中文| 亚洲免费无码在线| 亚洲乱色伦图片区小说 | 免费无码作爱视频| 国产精品亚洲一区二区三区久久| 中文字幕亚洲综合久久2| 精品亚洲成α人无码成α在线观看 | 亚洲乱码国产乱码精华| 亚洲精品资源在线| 亚洲欭美日韩颜射在线二| 日韩一区二区免费视频| 黄页网站在线观看免费高清| 97人妻精品全国免费视频| 色吊丝性永久免费看码| 日韩亚洲人成在线综合|