Hi,

Am 01.03.2009 um 15:23 schrieb glow:

1) Why is cond and condp syntax inconsistent (necessity of :else)?

The syntax of cond is

  (cond
    test1 clause1
    test2 clause2
    ...)

That is the first argument will be evaluated. If it is logically true,
the second argument is evaluated and its result returned. If the
test is logically false, cond goes on with test2 and clause2 etc.
:else is simply a trick to provide an always true test. You could
also write true, 5 or "Hello World!" instead of :else. This is the
same eg. in Scheme.

The syntax of condp is

  (condp test-fn thing
    candidate1 clause1
    candidate2 clause2
    ...)

Here the first and second arguments are a test function and the
thing to test. condp takes the third argument and checks, whether
(test-fn candidate1 thing) returns logically true. If so clause1 is
evaluated and its result returned. Otherwise it goes on with
candidate2 and clause2. How do you specify here the :else?
So the convention is an odd clause at the end, which is then
interpreted at as else-clause if no candidate yields logically
true.

Every syntax by itself is consistent. Although the :else could
be considered a hack. Maybe cond should be adjusted to
allow an odd else-clause?

Note also, that condp throws if no candidate yields true and
no else-clause is provided. And it supports a form, where the
test-fn result is passed to the clause which is expected to be
a function.

  (condp some coll
    set1 :>> (fn [hit] ...)
    set2 :>> (fn [hit] ...)
    ...)

2) On page 1 of introduction to Lisp I read "(+ 1 2) but also (+ 1 2
3)". Wow prefix notation is cool. But imagine for a moment
that in an new exciting language you can write (* 1 2) but not (* 1 2
3)! You must use (cond* 1 2 3 4) and what is worse (cond* 1 2 3
4 :else 5)! Moreover since :else is necessary in cond why not (if a
b :else c)?! That looks sooo bad.

The reasons why it is like that are outlined above. And for
the case file: In almost all languages you cannot say (* 1 2 3).
You have to say (* (* 1 2) 3) aka 1 * 2 * 3.

Sincerely
Meikel

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to