[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lisp question
From: |
Hadron |
Subject: |
Re: lisp question |
Date: |
Mon, 30 Apr 2007 01:06:04 +0200 |
User-agent: |
Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.99 (gnu/linux) |
Barry Margolin <barmar@alum.mit.edu> writes:
> In article <871wi385na.fsf@gmail.com>, Hadron <hadronquark@gmail.com>
> wrote:
>
>> from the lisp tutorial which comes with emacs 22:
>>
>> ,----
>> | 1.8.3 Variable Number of Arguments
>> | ----------------------------------
>> |
>> | Some functions, such as `concat', `+' or `*', take any number of
>> | arguments. (The `*' is the symbol for multiplication.) This can be
>> | seen by evaluating each of the following expressions in the usual way.
>> | What you will see in the echo area is printed in this text after `=>',
>> | which you may read as `evaluates to'.
>> |
>> | In the first set, the functions have no arguments:
>> |
>> | (+) => 0
>> |
>> | (*) => 1
>> |
>> | In this set, the functions have one argument each:
>> |
>> | (+ 3) => 3
>> |
>> | (* 3) => 3
>> |
>> | In this set, the functions have three arguments each:
>> |
>> | (+ 3 4 5) => 12
>> |
>> | (* 3 4 5) => 60
>> `----
>>
>> It kind of glosses over sections (1) and (2).
>>
>> Why do (*) and (* 3) evaluate to 1?
>
> (* 3) evaluates to 3, not 1.
Sorry, yes.
>
> With associative functions, calling them with no arguments returns the
> identity value for that function. This maintains the equivalence that
>
> (<fun> <arguments>) == (<fun> (<fun> <part1>) (<fun> <part2>))
>
> for any partitioning of the original arguments, including part1 or part2
> being empty. E.g.
>
> (* 3 4 5) = (* (* 3) (* 4 5)) = (* (*) (* 3 4 5))
All clear. Thanks.