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

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

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

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

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

    ;實(shí)現(xiàn)

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

    習(xí)題4.52,實(shí)現(xiàn)if-fail的特殊形式,在第一個(gè)表達(dá)式如果求值成功,就返回該表達(dá)式的值,否則返回第二個(gè)表達(dá)式的值,實(shí)現(xiàn)如下:
    ;擴(kuò)充analyze
     ((
    if-fail? exp)
             (analyze
    -if-fail exp))
    ;實(shí)現(xiàn)
    (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如果執(zhí)行成功,就返回結(jié)果pred-value,否則就執(zhí)行fail過(guò)程(lambda() (cproc env succeed fail)),測(cè)試略。

    習(xí)題4.53,根據(jù)題意可知這個(gè)過(guò)程返回結(jié)果應(yīng)該是(prime-sum-pair '(1 3 5 8) '(20 35 110))的所有結(jié)果,執(zhí)行也是如此:
    ;;; AMB-Eval value:
    ((
    8 35) (3 110) (3 20))

    習(xí)題4.54,將require實(shí)現(xiàn)為特殊形式:
    ;擴(kuò)充analyze
    ((require? exp)
             (analyze
    -require exp))

    ;實(shí)現(xiàn)
    (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综合色区无码一区| 精品无码一级毛片免费视频观看 | 久久精品国产亚洲AV无码偷窥| 国产成人无码精品久久久久免费| 亚洲AV无码成H人在线观看| 猫咪www免费人成网站| 亚洲精品国产综合久久一线| 五月天婷婷免费视频| 亚洲最大AV网站在线观看| 青青操在线免费观看| 亚洲AV无码久久精品色欲| 无码一区二区三区免费| 亚洲成人免费在线观看| 亚洲精品免费观看| 亚洲性猛交XXXX| a在线观看免费网址大全| 国产亚洲色婷婷久久99精品| 四虎影视在线影院在线观看免费视频| 亚洲AV无码一区二区乱子伦| 2020因为爱你带字幕免费观看全集| 亚洲中文字幕人成乱码| 国产精品色午夜视频免费看| 一级一级一片免费高清| 亚洲午夜久久久精品影院| 最近2019中文字幕免费直播| 亚洲免费电影网站| 日韩视频在线免费| 中文字幕手机在线免费看电影| 亚洲国产精品国自产拍电影| 久久久久国产精品免费免费搜索| 免费手机在线看片| 亚洲一区二区成人| 美女被免费视频网站a国产| 国产免费播放一区二区| 亚洲欧洲精品国产区| 免费a级毛片永久免费| 久久青草91免费观看| 亚洲第一成年免费网站|