语法 - 规则语法

时间:2013-09-20 00:25:38

标签: scheme racket

我一直在研究定义语法规则的语法,但我仍然陷入困境。

我想用这个签名定义一个规则:(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),就像在列表中调用了地图一样。

1 个答案:

答案 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)

基本上这与你所描述的完全一样。您需要inreturn声明为文字。