Scheme 卫生宏中文字的使用

问题描述 投票:0回答:0

在 Scheme 语言中(让我们将 R5RS 作为语言参考)卫生宏可以使用结构

(define-syntax <keyword> <transformer>)
定义,其中
<keyword>
是宏的名称,
<transformer>
描述宏将匹配的
<pattern>
<template>
描述了应该如何转换该模式。
<transformer>
有以下形式:
例如:
(syntax-rules <literals> <syntax-rule> ...)
但是,也允许指定一些
<syntax-rule>

作为

(<pattern> <template>)

声明的一部分。我从语言规范中了解到,出现在
(define-syntax swap
  (syntax-rules ()
      (; pattern to be matched:
       (swap x y)
       ; template the pattern will get replaced by:
       (let ((tmp x))
         (set! x y)
         (set! y tmp)))))

<literals>

中的任何标识符都是模式变量,除非它是开始模式的
syntax-rules
,或者在
<pattern>
中列出,或者是标识符
<syntax-rule>
。模式变量匹配任意输入元素,并用于在模板中返回与模式匹配的输入元素。然而,出现在 
<keyword>
 中的标识符被解释为要与输入的相应子形式匹配的文字标识符。
实际上,在几乎所有的例子中,人们都可以找到这个文字列表
<literals>
 保持为空(如上例所示)。
有人可以为我提供一个简单的例子来说明具有此类文字的相关性。在什么样的实际用例中使用这样的文字才有意义?一个具体而简单的例子会有所帮助。


macros scheme r5rs
© www.soinside.com 2019 - 2024. All rights reserved.