1

Racket では、次のように動作します。

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

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

ただし、取得して返すようにリストbになるように定義する方法はありません。出来ますか?(1 2)(+ . b)(a . b)3

4

2 に答える 2

2

もちろん、次を使用してapplyください:

(define a +)
(define b '(1 2))
(apply a b)       ; => 3
(apply + b)       ; => 3
于 2013-03-26T11:51:27.450 に答える
1

これはどうですか... 使わずに を使用applyevalます。しかし、真剣に、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
于 2013-03-26T13:23:18.037 に答える