我一直在寻找定义语法规则的语法,但我仍然卡住了.
我想用这个签名定义一个规则:(define-syntax-rule(for {val in lst} return res).
基本上它只是应用val和lst的地图.但我正在努力学习语法.这就是我到目前为止所提出的......(syntax-rules()((对于lst中的val)(map(val lst))))...
输入将是这样的:
(对于{val in'(0 1 2 3 4)} return( - val 1))
并输出(-1 0 1 2 3),就像在列表中调用了map一样.
这样就完成了:
(define-syntax for
(syntax-rules (in return)
((for val in list return exp)
(map (lambda (val) exp) list))))
> (for x in '(0 1 2 3) return (- x 1))
(-1 0 1 2)
Run Code Online (Sandbox Code Playgroud)
基本上这正是你所描述的.你需要in并return声明为文字.