在方案中动态更改文字

时间:2014-03-22 11:23:30

标签: scheme racket r5rs

我想写一个采用文字的方法,比如说

turn

end返回类似这样的内容

(my turn)

因此,在此之后,如果我调用eval,scheme将使用参数my调用定义的方法turn

我确实只是为了返回另一个文字或字符串,但我没有设法做我想要的。我没有找到任何关于此类事情的规范。

我认为我有某种方式使用这样的东西:`(my,@param)但它不起作用。

turn是一个符号

1 个答案:

答案 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