了解Scheme宏的来源:define-syntax和syntax-rules。 Scheme是一种编程语言,它的宏系统是基于define-syntax和syntax-rules的。在Scheme中,宏是一种特殊的语法形式,它允许用户扩展语言的语法。宏可以用来定义新的语法形式,或者用来修改已有的语法形式。 define-syntax是定义宏的基本方法,它接受两个参数:宏的名称和...
但如果定义或语法定义屏蔽了某个语法关键字,且只有借助该语法关键字的含义才能确定包含屏蔽定义的一组形...
( 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 ... ) ...
在Scheme中,宏是通过(define-syntax关键字定义的。宏定义了一个语法变换规则,当Scheme解释器遇到匹配的语法结构时,就会按照定义的规则进行变换。 例如,我们可以定义一个简单的宏,将(add x y)转换为(+ x y): (define-syntax add (syntax-rules () ((_ x y) (+ x y))) 这样,在代码中我们就可以使用(ad...
语法:(define macro-name (syntax-rules () ( (template) operation) ...) ) 上面的when的定义: (define-syntax when (syntax-rules () ((when test expr ...) (if test (begin expr ...))) when的定义非常简洁,主要是这种语法的模版非常直观,其中“...”就可以表示有多个参数。 r5rs文档...
C 语言的宏替换作用对象是 program text,即程序文本。而 Scheme 宏作用对象是 syntax tree,即语法树。 宏的定义语法 要建立关键字与转换器之间的关联,可以使用define-syntax,let-syntax或letrec-syntax。define-syntax可用于 top-level,另外两个可用于局部。
( 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 ] ... ) ...
了解Scheme宏的来源:define-syntax和syntax-rules 计算pi & scheme语法的级数近似值 Scheme中的简单图形表示 Scheme中的语法和变量 计算Common Lisp宏的参数 在Makefile中多次计算动态宏 使用Scheme的列表中的数字总和 URI中的Scheme是可选的吗? 计算vba宏中某列中某文本的个数 要计算分钟数的VBA宏 React中任意到任...
简单宏示例: (define-syntax square (syntax-rules () [(_ x) (* x x)])) (square 4) ; 结果为16 结语以上内容仅涵盖了Scheme的基础部分。随着学习的深入,你还可以探索Scheme的类型系统、并发编程、模块系统等高级特性。Scheme不仅是一门编程语言,更是一种思考方式,它鼓励你以更抽象、更函数化的方式来...
define-syntax和syntax-rules:define-syntax-rule只能匹配一个pattern,但是使用define-syntax和syntax-rules,我们 可以在一个宏里写出多个pattern-template。 我们 可以在一个宏里写出多个pattern-template。 (define-syntaxid(syntax-rules (literal-id ...) [pattern template] ...)) ;;一个具体的例子 (define-sy...