在球拍,如果一个没有引号的一对与所述点表示法构成,是有可能使用一个变量或者用于第二元件的表达值?(I

2019-08-18 00:21发布

球拍,以下工作:

(+ . [1 2]) ; => 3

{ define a + }
(a . [1 2]) ; => 3

然而,我看不出有任何的方式来定义b(1 2)名单,以便得到(+ . b)(a . b)返回3 。 可能吗?

Answer 1:

当然,只要使用apply

(define a +)
(define b '(1 2))
(apply a b)       ; => 3
(apply + b)       ; => 3


Answer 2:

这个怎么样?不使用apply ,但使用eval 。 但严重的是,使用apply在这种情况下一个更好的主意,有什么不妥( eval 是邪恶的 ,虽然,看文件 ,了解与命名空间中的最后一部分):

(define a +)
(define b '(1 2))

; executing in the evaluation window

(eval `(+ ,@b))
=> 3
(eval `(a ,@b))
=> 3

; executing from the definitions window

(define-namespace-anchor an)
(define ns (namespace-anchor->namespace an))    
(eval `(+ ,@b) ns)
=> 3
(eval `(a ,@b) ns)
=> 3


文章来源: In Racket, if an unquoted pair is constructed with the dot notation, is it possible to use a variable or an expression value for the second element?
标签: scheme racket