zoukankan      html  css  js  c++  java
  • PLAI那些事07 FAE with Deferred Substitution

    FAE-parse : 一成不变

    FAE-Value : interp的最终转让值

    numV: value
    closureV: param-FAE(或value,或function) pair list
    (define-type FAE-Value
      [numV (n number?)]
      [closureV (param symbol?) (body FAE?) (ds DefrdSub?)])
    

    DefrdSub : 传达environment

    以前WAE中使用的DefrdSub只用于with,但是在这里with的置换和function call这两种作用是同时进行的。所以在FAE-Value上有numV和closureV两种组合。
    (define-type DefrdSub
      [mtSub]
      [aSub (name symbol?) (value FAE-Value?) (ds DefrdSub?)])
    

    lookup : symbol DefrdSub -> FAE-Value

    (define (lookup name ds)
      (type-case DefrdSub ds
        [mtSub () (error 'lookup "free variable")]
        [aSub (x val rest) (if (symbol=? x name)
                               val
                               (lookup name rest))]))
    

    interp : FAE - >FAE 修改为 FAE DefrdSub -> FAE-Value

    如果interp f ds中有f存在于ds中,在id (s)的lookup s ds中,closureV重新出现,那么f-val中的closureV a-val将成为numV。
    app中aSub为什么不是mtsub ?F1WAE with deferred substitution中是mtSub的理由是static scope。这里是由ds决定lambda函数的scope。这时的ds不是叫app时的ds,而是相当于function被定义时scope的ds。
    (define (interp fae ds)
      (type-case FAE fae
        [num (n) (numV n)]
        [add (l r) (num+ (interp l ds) (interp r ds))]
        [sub (l r) (num- (interp l ds) (interp r ds))]
        [id (s) (lookup s ds)]
        [fun (x b) (closureV x b ds)]
        [app (f a) (local [(define f-val (interp f ds))
                           (define a-val (interp a ds))]
                      (interp (closureV-body f-val)
                              (aSub (closureV-param f-val)
                                    a-val
                                    (closureV-ds f-val))))]))
    
    如果(closureV-ds - f-val)中加入ds,就会成为dynamic scope。
  • 相关阅读:
    js总结:增加和减少文本框
    java总结:字符串切割
    Spring-----ioc
    Hibernate之二级缓存
    Hibernate之HQL
    Hibernate关联关系(一对多自关联 ,多对多)
    Hibernate关联关系(一对多)
    Hibernate之主键生成策略
    如何使用hibernate完成CRUD操作
    Struts2-----文件上传与拦截器原理
  • 原文地址:https://www.cnblogs.com/lastk/p/12848373.html
Copyright © 2011-2022 走看看