#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. 代码练习之 登陆 PHP会话控制 session cookie

    log.html <html> <head><title>Home Page</title></head> <body> < ...

  2. Codeforces Beta Round #17 C. Balance (字符串计数 dp)

    C. Balance time limit per test 3 seconds memory limit per test 128 megabytes input standard input ou ...

  3. App服务端架构变迁

    随着移动互联网时代的到来,移动技术也随之飞速发展.如今,App已然成为绝大多数互联网企业用来获取用户的核心渠道.以往以PC为主要承载平台的各业务线,源源不断集成加入到移动项目中来,原本以产品为中心快速 ...

  4. Python自省 type(),dir(),getattr(),hasattr(),isinstance().

    Python自省 这个也是python彪悍的特性. 自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr() ...

  5. 解决tomcat提交的数据乱码的问题

    有时,开发过程中会遇到前端传入“中文”并返回时,会出现乱码!主要是因为前端通过tomcat7提交的数据就出现了乱码的问题,也就说根源在于tomcat7. 有2中方案解决该问题: (1)使用tomcat ...

  6. python小写转大写金额

    python小写转大写金额 摘自:http://shine-it.net/index.php?topic=14575.0 def _rmb_upper(self, value): "&quo ...

  7. win7 linux双系统删除linux

    本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...

  8. sql中判断某个字符串是否包含一个字符串

    如果想从SQL Server中查询包含某个关键字的东东,怎么查询呢? 一般有两个方法: 1.用like——select * from tablename where field1 like like ...

  9. RecSys Challenge 2015

    [The Task] Given a sequence of click events performed by some user during a typical session in an e- ...

  10. Python之基础数学知识

    一.线性代数 1.求转置 import numpy m = numpy.mat([[1, 2], [3, 4]]) print("Matrix.Transpose:") print ...