1

我一直在研究定义语法规则的语法,但是我仍然卡住了。

我想用这个签名定义一个规则:(define-syntax-rule (for {val in lst} return res)。

基本上它只是应用给定 val 和 lst 的 map。但我在语法上苦苦挣扎。到目前为止,这就是我想出的...... (syntax-rules () ((for val in lst) (map (val lst)))) ...

输入将类似于:

(对于 {val in '(0 1 2 3 4)} 返回 (- val 1) )

并输出 (-1 0 1 2 3),就好像在列表中调用了 map。

4

1 回答 1

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声明为文字。

于 2013-09-20T01:27:44.210 回答