我想编写一个采用文字的方法,可以说
turn
end 返回类似这样的东西
(my turn)
所以,在那之后,如果我调用eval
,scheme 将调用my
带有参数的定义方法turn
。
我确实设法返回了另一个文字或字符串,但我没有设法做我想做的事。而且我没有找到任何关于这样的规范。
我想我必须以某种方式使用这样的东西:`(my,@param)
但它不起作用。
turn
是一个符号
对我来说听起来像是一个XY 问题,也许有一种更简单的方法可以实现你真正想要做的事情......无论如何,回答这个问题:
; we need to prevent the evaluation of the parameter,
; a normal procedure won't work here - we need a macro
(define-syntax method
(syntax-rules ()
((_ x) '(my x))))
; sample input
(define turn 9)
(define (my param) (+ 1 param))
; setup the evaluation namespace
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
; first test: `method` returns a non-evaluated expression
(method turn)
=> '(my turn)
; second test: evaluate the returned expression
(eval (method turn) ns)
=> 10