zoukankan      html  css  js  c++  java
  • let>combination 实现了let原语

    最近实现了普通的let表达式以及命名表达式。其中普通的表达式为

    (let ((var1 exp1) (var2 exp2) ... (varn expn)) body)

    变换成为((lambda (var1 var2 ... varn) body) exp1 exp2 ... expn)

    命名let的形式为

    (let name ((var1 exp1) (var2 exp2) ... (varn expn)) body)

    变换为(begin (define (name var1 var2 ... varn) body) (name exp1 exp2 ... expn))

    最终的代码实现为let->combination,其中未命名的和命名的let其实是分开来转换的。

    (define (let->combination exp)
      (if (pair? (cadr exp)) ;; here is the unamed let
       (let ((list-of-body (cadr exp)) (body (cddr exp)))
        (let ((var-exp-list (unzipped list-of-body)))
          (let ((var-list (car var-exp-list))
                (exp-list (cadr var-exp-list)))
            (cons (make-lambda var-list body) exp-list))))
       ;; here is the named
       (let ((let-name (cadr exp)) (list-of-body (caddr exp)) (body (cadddr exp)))
         (let ((var-exp-list (unzipped list-of-body)))
           (let ((var-list (car var-exp-list))
                 (exp-list (cadr var-exp-list)))
             (let ((func (list 'define (cons let-name var-list) body)))
               (list 'begin func (cons let-name exp-list))))))
       ))

  • 相关阅读:
    Java异常
    docker安装和介绍(基于centos 7)
    centos7搭建gitlab版本控制系统
    webstorm快捷键使用
    Extjs-note
    mak iso
    windows上的硬盘挂载到linux上的步骤方法
    【JAVA笔记——术】JSP中乱码问题的解决方法
    PHP获得IP方式
    ubuntu安装hadoop 若干问题的解决
  • 原文地址:https://www.cnblogs.com/mathlover/p/2707709.html
Copyright © 2011-2022 走看看