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 )

时间: 2024-10-12 08:16:40

scheme 中的宏使用的相关文章

iOS 中 #error宏 的使用的一个例子

头文件中如下定义宏: /** * @brief 默认空间名(必填项) */ #error 必填项 #define DEFAULT_BUCKET @"" /** * @brief 默认表单API功能密钥 (必填项) */ #error 必填项 #define DEFAULT_PASSCODE @"" 类的实现中使用: self.bucket = DEFAULT_BUCKET; self.passcode = DEFAULT_PASSCODE; 这样,如果没有初始化这两

复习C++:VS2008中的宏干嘛用的

VS2008中有宏,可也进行编辑和设置. 好处: 1.快速生成代码,帮助开发. 2.个人定制化功能,IDE更合适自己用. 3.提升编程效率. 缺点: 使用VB开发,一开始用起来费事.不过有官方参考文档,拷贝粘贴实现. 举例: 自动填写类构建代码 注意: IDE中的宏是为了方便工具的使用,代码中的宏是一种定义. 延伸阅读: 代码中的宏通常啥用: 1.控制编译开关.#ifdeine #endif 2.宏定义,用于代码一些常量,比如pai.#define PAI = 3.14

iOS开发中使用宏定义提高开发效率

iOS开发中使用宏定义提高开发效率 (2013-07-10 10:47:33) 转载▼ iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义. 调试Log iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便. 看下面的例子: #ifdef DEBUG #define LOG(...) NSL

makefile 中定义宏位置需要注意一下

1 CUR_DIR = $(shell pwd) 2 3 CFLAGS = -g -Wall 4 GCC = gcc 5 GXX = g++ 6 7 TARGET = exe.out 8 9 SRC_FILES += $(shell find $(CUR_DIR) -name *.cc) 10 += $(shell find $(CUR_DIR) -name *.cpp) 11 12 OBJS = fatal-impl.o log.o 13 14 INCLUDE += -I. 15 RM = r

swift中类似宏定义

建一个类 如,在Contans.swift中 import UIKit let kMAIN_SIZE = UIScreen.mainScreen().bounds 在其他地方直接用 比如在 MyTabbarViewController.swift中 var bgView = UIView(frame:CGRectMake(0, 0, kMAIN_SIZE.width, kMAIN_SIZE.height - 20 - 44)); swift中类似宏定义,布布扣,bubuko.com

Makefile中进行宏定义

实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用. 关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D 在Makefile中我们可以通过宏定义来控制源程序的编译.只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可. 如:CFLAGS +=

C++在使用Qt中SLOT宏须要注意的一个小细节

大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但假设指针去调用非虚函数,这个时候会调用C++的静态绑定,去推断当前的指针是什么类型,就去运行哪个类型的函数. 非常有一种比較经典的使用方法,就是Template Method模式,基类定义一个非虚的算法框架,里面详细定义一些纯虚的函数片段,由子类来进行实现,从而实现了控制整体框架,但能够给客户自由定制的灵活性.这个使用方法事实上就是指针去调用了基类的方法,由方法的扩展之后

C/C++中的宏

时间:2014.05.19 地点:图书馆 心情:几天在图书馆做了一张照片,哎,以后可业余开个照相馆啊~哈哈 ------------------------------------------------------------------------------- 一.宏万恶之首 宏由于缺少类型检查,被认为是万恶之首,但宏的可读性和性能非常好,我们只要合理正确的使用宏,那么必然可提高代码可读性和可维护性. --------------------------------------------

如何使用C/C++动态库与静态库中的宏

在哪个cpp文件中使用的该动态库或静态库,就在该h/cpp文件所在的工程的预处理命令中添加库中的宏. 如有库工程add,其头文件如下 #ifndef _ADD_H #define _ADD_H #if defined( _WIN32 ) || defined( __MINGW32__ ) # if defined( ADD_EXPORTS ) # define ADD_EXPORT __declspec(dllexport) # elif defined( ADD_USE_DLL_IMPORT