On 20-Aug-07, at 5:34 PM, naruto canada wrote:
I'm not sure what you tried but Gambit supports a multiple argument apply (the last argument is a list of the remaining arguments. So:
(apply + '(1 2 3 4))
10
(apply + 1 '(2 3 4))
10
(apply + 1 2 '(3 4))
10
(apply + 1 2 3 '(4))
10
(apply + 1 2 3 4 '())
10
Marc
You are right, I had a mismatch of arity. It works now. Still, both methods should be equivalent.
In general (apply E1 E2) != (eval (cons E1 E2))
because eval tries to recursively evaluate its argument. It will try to evaluate the **result** of evaluating E1, and all the elements of the list **resulting** from the evaluation of E2. With apply the second round of evaluation does not occur.
Note that sometimes there is no difference because
5 = (eval 5) = (eval (eval 5)) = ...
but in other cases there is a difference because
car = (eval 'car) != (eval (eval 'car)) != ...
Marc