Scheme 语法规则语法
我一直在查看定义语法规则的语法,但是我仍然被卡住了 我想用这个签名定义一个规则:(define syntax rule(对于{val in lst}return res) 基本上,它只是在给定val和lst的情况下应用map。但我正在努力解决语法问题。这就是我到目前为止想到的。。 .... (语法规则() ((对于lst中的val) (地图(val lst))) 输入类似于: (用于{val in'(01 2 3 4)} 返回(-val 1) ) 和输出(-1 0 1 2 3),就好像在列表中调用了map一样。这就完成了:Scheme 语法规则语法,scheme,racket,Scheme,Racket,我一直在查看定义语法规则的语法,但是我仍然被卡住了 我想用这个签名定义一个规则:(define syntax rule(对于{val in lst}return res) 基本上,它只是在给定val和lst的情况下应用map。但我正在努力解决语法问题。这就是我到目前为止想到的。。 .... (语法规则() ((对于lst中的val) (地图(val lst))) 输入类似于: (用于{val in'(01 2 3 4)} 返回(-val 1) ) 和输出(-1 0 1 2 3),就好像在列表中
(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)
本质上,这正是您所描述的。您需要在中声明,并将返回
声明为文字。这就完成了:
(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)
本质上,这正是您所描述的。您需要将中的和返回声明为文字。您不能使用定义语法规则
,因为您在定义中有文字(即中的和返回
)。@GoZoner的答案(如果您在(列表中的val)周围添加paren)
)给你你想要的。(在Racket中,花括号和普通括号一样。)顺便说一下,Racket附带的功能与你试图定义的功能相同。(for/list([val'(0 1 2 3 4)](-val 1))
=>(-1 0 1 2 3)
您不能使用定义语法规则
,因为您在定义中有文字(即中的和返回
)。@GoZoner的回答(如果您在(列表中的val)
周围添加括号)会提供您想要的内容。(在Racket中,花括号与常规括号相同。)顺便说一句,球拍的功能与您试图定义的功能相同。(for/list([val'(0 1 2 3 4)](-val 1))
=>”(-1 0 1 2 3)