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


    主站蜘蛛池模板: 亚洲中文字幕第一页在线| 美女视频黄是免费的网址| 免费成人av电影| 日韩国产欧美亚洲v片| 成人免费网站在线观看| 在线观看日本亚洲一区| 日韩在线看片免费人成视频播放 | 亚洲专区先锋影音| 日韩精品久久久久久免费| 亚洲综合婷婷久久| 91精品视频免费| 亚洲a∨国产av综合av下载 | 国产精品亚洲精品日韩动图| 国产又大又黑又粗免费视频| 国产成人无码精品久久久免费| 亚洲中文字幕视频国产| 久草免费福利资源站| 亚洲av无码久久忘忧草| 国产精品国产午夜免费福利看| 猫咪免费人成在线网站| 亚洲国产精品SSS在线观看AV| 又大又硬又爽又粗又快的视频免费| 亚洲AV一二三区成人影片| 国产小视频免费观看| 精品视频在线免费观看| 亚洲国色天香视频| 亚洲第一成人影院| 久久精品免费一区二区三区| 亚洲中字慕日产2020| 亚洲成a人一区二区三区| 99re6热视频精品免费观看| 亚洲国产精品网站在线播放 | 国产精品视频免费一区二区| 国产高清视频免费在线观看| 亚洲视频在线观看免费视频| 国产精品免费视频网站| 国内少妇偷人精品视频免费| 亚洲国产精品无码久久九九大片 | 日本特黄特色免费大片| 国产真人无码作爱免费视频| 亚洲人成黄网在线观看|