zoukankan      html  css  js  c++  java
  • let内嵌lambda使用set!构成闭包

    查了半天没有找到scheme中判断数据类型的函数,索性自己写了个type?,发现闭包和递归有着微妙的联系.
    本例中,自由变量是types,外层let初始化了types的值,内层let里的(set! types rest)则是在不断缩小types.直至为null.
     
    ;let内嵌lambda,可以构成闭包
    ;expr ...部分即可对freevar进行各种修改值的操作
     
    (define function 
      (let ((freevar value) ...)
        (lambda (var ...) 
          expr ... )))
     
    (define type?
      (let ((types (list 
                    boolean? 
                    pair? 
                    list?
                    symbol? 
                    number? 
                    char? 
                    string? 
                    vector? 
                    procedure? 
                    port? 
                    bytes?
                    keyword?
                    set?
                    box?
                    void?
                    dict?
                    mpair?
                    stream?
                    regexp?
                    pregexp?
                    byte-regexp?
                    byte-pregexp?)))
        (lambda (data)
          (let ((f (car types))(rest (cdr types)))        
            (if (f data)
                (display f)
                (if (null? rest)
                    (display "unknow type")
                    (begin (set! types rest)
                           (type? data))))))))
     
  • 相关阅读:
    第三章 读书笔记
    第一章 读书笔记
    第二章 读书笔记
    第九章
    第十章
    第8章 蜂鸣器
    第7章 led闪烁
    第6章 第一个Linux驱动程序:统计单词个数
    第5章 搭建S3C6410开发板环境
    第3章 Git使用入门
  • 原文地址:https://www.cnblogs.com/xiangnan/p/3386484.html
Copyright © 2011-2022 走看看