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。
  • 相关阅读:
    在win7 64位上安装VS2015的问题汇总
    关于C#类的深拷贝的问题
    线程、进程
    c#日志 log4net
    C#常识
    Tribon数据抽取的一些心得
    Java Web相关课程学习笔记
    过滤器、监听器、拦截器的区别
    SHH架构中几个配置文件解释 applicationContext.xml web.xml struts.xml
    vue关于动态增加路由页面
  • 原文地址:https://www.cnblogs.com/lastk/p/12848373.html
Copyright © 2011-2022 走看看