我想写一个采用文字的方法,比如说
turn
end返回类似这样的内容
(my turn)
因此,在此之后,如果我调用eval
,scheme将使用参数my
调用定义的方法turn
。
我确实只是为了返回另一个文字或字符串,但我没有设法做我想要的。我没有找到任何关于此类事情的规范。
我认为我有某种方式使用这样的东西:`(my,@param)
但它不起作用。
turn
是一个符号
答案 0 :(得分:1)
对我来说听起来像XY problem,或许有一种更简单的方式来实现真正打算做的事情......无论如何,回答这个问题:
; 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