zoukankan      html  css  js  c++  java
  • scheme 中的宏使用

    #lang scheme

    ( define-syntax my-when 
       ( syntax-rules ()
          [ ( _ pred body ... )
            ( if pred ( begin body ... ) ( void ) ) ] ) )

    ( my-when 
      ( = 2 1 )
      ( display 1 )
      ( display 2 ) )

    ( define-syntax my-let 
       ( syntax-rules () 
          [ ( my-let ( [ var exp ] ... )
                     body ... )
            ( ( lambda ( var ... )
                 body ... ) exp ... ) ] ) )

    ( my-let 
      ( [ a 1 ]
        [ b 2 ] )
      ( display a )
      ( display b ) )

    ( define-syntax my-let* 
       ( syntax-rules ()
          [ ( my-let* ( [ var exp ] ) body ... )
            ( my-let ( [ var exp ] ) body ... ) ]
          [ ( my-let* ( [ var exp ] 
                        [ var1 exp1 ] ... ) body ... )
            ( my-let ( [ var exp ] )
                     ( my-let* ( [ var1 exp1 ] ... )
                               body ... ) ) ] ) )

    ( define-syntax my-for 
       ( syntax-rules ()
          [ ( my-for ( var from to ) body ... )
            ( let loop ( [ var from ] )
               ( my-when 
                 ( < var to )
                 body ... 
                 ( loop ( + var 1 ) ) ) ) ] ) )

    ( my-for 
      ( i 0 10 )
      ( display "a" )
      ( display "b" ) )


    ;;; 一种比較有意思的使用方法

    ( define-syntax loop 
       ( syntax-rules ( begin end from to )
          [ ( loop <var> from <min> to <max> start body ... end )
            ( let loop1 ( [ <var> <min> ] )
               ( cond 
                  [ ( < <var> <max> ) body ... ( loop1 ( + 1 <var> ) ) ]
                  [ else ( void ) ] ) ) ] ) )

    ( loop i from 1 to 10
       begin 
           ( display 1 )
           ( newline )
           ( display 2 ) 
           ( newline )
       end )
  • 相关阅读:
    使用 webapi+Aspose.Cells 导出execl 功能
    自定义html滚动条样式
    vue+webapi 实现WebSocket 推送
    vue 跨层级 调用solt 传递
    关于对 asp.net mvc 异步方法的理解
    c# 反射机制
    千里之行,始于足下
    [转]浅析大数据量高并发的数据库优化
    关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
    深拷贝
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6819404.html
Copyright © 2011-2022 走看看