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 )
  • 相关阅读:
    css-box-shadowing
    css- :before :after
    css: line-height 与box-sizing
    金蝶数据库后台追踪
    钉钉审批开发,空白内容
    asp.net c#语言实现钉钉鉴权验证
    钉钉事件回调c#测试完成
    钉钉C#发起审批实例demo
    asp.net c#语言实现钉钉鉴权验证
    图片码
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6819404.html
Copyright © 2011-2022 走看看