【发布时间】:2013-09-20 00:25:37
【问题描述】:
我一直在研究定义语法规则的语法,但我仍然卡住了。
我想用这个签名定义一个规则:(define-syntax-rule (for {val in lst} return res)。
基本上它只是应用给定 val 和 lst 的 map。但我在语法上苦苦挣扎。这是我到目前为止想出的.. …… (语法规则() ((对于 lst 中的 val) (地图(val lst)))) ...
输入会是这样的:
(for {val in '(0 1 2 3 4)} 返回 (- val 1) )
并输出 (-1 0 1 2 3),就好像在列表中调用了 map。
【问题讨论】:
-
您不能使用
define-syntax-rule,因为定义中有文字(即in和return)。 @GoZoner 的回答(如果你在(val in list)周围添加括号)给你你想要的。 (在 Racket 中,花括号与常规括号相同。) -
顺便说一下,Racket 带有
for/list,它与您尝试定义的功能相同。(for/list ([val '(0 1 2 3 4)]) (- val 1))=>'(-1 0 1 2 3)