[gambit-list] (eval (cons func '(1 2))) don't work
Marc Feeley
feeley at iro.umontreal.ca
Mon Aug 20 18:38:16 EDT 2007
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
More information about the Gambit-list
mailing list