Racket では、次のように動作します。
(+ . [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