我一直在研究定义语法规则的语法,但我仍然陷入困境。
我想用这个签名定义一个规则:(define-syntax-rule(for {val in lst} return res)。
基本上它只是应用val和lst的地图。但我正在努力学习语法。这是我到目前为止所提出的...... .... (syntax-rules() ((对于lst中的val) (地图(val lst)))) ...
输入类似于:
({val in'(0 1 2 3 4)} 返回( - val 1) )
和输出(-1 0 1 2 3),就像在列表中调用了地图一样。
答案 0 :(得分:6)
这样就完成了:
(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)
基本上这与你所描述的完全一样。您需要in
和return
声明为文字。