我实际上遇到了Scheme中的问题。我只是不知道如何解决它。理解起来非常简单,我觉得任何Scheme专家都很容易。我只需要在定义宏“操作”的方案中用defmac函数模拟haskell的where表达式。例如,执行如下代码
> (operation (+ x y)
where ([x 1]
[y (+ x 32)]))
34
我对使用宏(defmac)在方案中表示简单对象的方式很熟悉,但现在我真的遇到了这个问题。
任何帮助或想法都会非常受欢迎。 提前谢谢。
答案 0 :(得分:2)
如果我理解正确,您希望将该代码转换为类似
的代码(let* ((x 1)
(y (+ x 32))
(+ x y))
(define-syntax operation
(syntax-rules (where)
((operation expression where body)
(let* body expression))))
应该这样做,但只能在表达式
之后的“where”之后答案 1 :(得分:1)
听起来应该这样做(使用defmac
的定义):
(defmac (operation expr
where (binding ...))
#:keywords where
(let* (binding ...)
expr))
它只是将您的operation
表单转换为等效的let*
,以便您的示例成为:
(let* ((x 1)
(y (+ x 32)))
(+ x y))