#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 )

scheme 中的宏使用的更多相关文章

  1. office中通过宏添加快捷键

    把“Microsoft 公式 3.0”作为一个按钮放在 2013中的快速访问工具栏的方法 在使用office办公软件的过程中,因为有的人还在使用office2003版本,所以在使用高版本的office ...

  2. 26.怎样在Swift中定义宏?

    Swift 中没有宏定义,苹果建议使用let 或者 get 属性来替代宏定义值.虽然没有#define,但我们仍然可以使用 #if 并配合编译的配置来完成条件编译.下面会列出Swift项目开发中的一些 ...

  3. IOS中利用宏将RGB值转换为UIColor(转)

    可以在pch文件中定义宏,这样整个项目就都可以用了! #define UIColorFromRGBValue(rgbValue) [UIColor colorWithRed:((float)((rgb ...

  4. sass中 混合宏 VS 继承 VS 占位符 各自的使用时机和特点

    初学者都常常纠结于这个问题“什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 举例代码见 2-24 行 编译出 ...

  5. iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

    问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...

  6. css编译工具Sass中混合宏,继承,占位符分别在什么时候使用

    //SCSS中混合宏使用 @mixin mt($var){ margin-top: $var; } .block { @include mt(5px); span { display:block; @ ...

  7. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...

  8. 如何在Excel中启用宏?

    OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...

  9. C语言中的宏定义

    目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...

随机推荐

  1. java中Queue接口

    Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类 ...

  2. [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理

    内存管理: 确保在须要的时候分配内存,在程序运行结束时释放占用的内存 假设仅仅分配内存而不释放内存,则会发生内存泄漏(leak memory),程序的内存占用量不断添加.终于会被耗尽并导致程序崩溃. ...

  3. (一)Solr——简介和安装配置

    1. solr简介 1.1 Solr是什么 Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器. Solr和lucene的版本是同步更新的,最新的版本是7. ...

  4. 不懂Git,别说自己是程序猿–20分钟git快速上手(转)

    在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是的,只要20分钟, 让你快速用上git. 我们 ...

  5. 转: python 利用EMQ实现消费者和生产者模型

    消费者 """ 测试emq-消费者 @author me """ import paho.mqtt.client as mqtt impor ...

  6. android UI 适配小节

    一.   像素密度表 像素密度表 比如UE 给了三张切图分别对应: mdpi,     xhdpi,     xxdpi 10 * 10,     20 * 20,     30 * 30 上面的值都 ...

  7. weblogic stuck实验2014-11-14

         以往对weblogic stuck认识是: 1.会造成系统总体慢. 2.在weblogic console中线程监控中会有显示. 3.weblogic使用队列处理线程.隔一段时间会扫描线程队 ...

  8. iis支持IPA和APK文件下载

    找到IIS 扩展名是:.apk MIMI类型是:application/vnd.android.package-archive扩展名是:.ipa MIMI类型是:application/iphone

  9. Powerdesign使用小技巧(转载)

    1.做CDM模型的时候,因为开始定义ITEM的时候,没有注意把NAME和CODE全定义成一样的.结果后面想改的时候比较麻烦,一修改NAME结果CODE也变了.后来找到两个方法可以解决这个问题.A.Po ...

  10. php-fig组织fig-standards的一些标准

    参考: http://psr.phphub.org/ https://github.com/php-fig/fig-standards https://github.com/PizzaLiu/PHP- ...