球拍,以下工作:
(+ . [1 2]) ; => 3
{ define a + }
(a . [1 2]) ; => 3
然而,我看不出有任何的方式来定义b
是(1 2)
名单,以便得到(+ . b)
和(a . b)
返回3
。 可能吗?
球拍,以下工作:
(+ . [1 2]) ; => 3
{ define a + }
(a . [1 2]) ; => 3
然而,我看不出有任何的方式来定义b
是(1 2)
名单,以便得到(+ . b)
和(a . b)
返回3
。 可能吗?
当然,只要使用apply
:
(define a +)
(define b '(1 2))
(apply a b) ; => 3
(apply + b) ; => 3
这个怎么样?不使用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