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 )
  • 相关阅读:
    团队二阶段冲刺个人工作总结9
    团队二阶段冲刺个人工作总结8
    团队二阶段冲刺个人工作总结7
    团队二阶段冲刺个人工作总结6
    PSP总结报告
    第十三周例行报告
    对团队成员公开感谢博客
    附加作业 软件工程原则的应用实例分析
    第十二周例行报告
    第十一周例行报告
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6819404.html
Copyright © 2011-2022 走看看