Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Maple, Mathematica, Scheme

2 views
Skip to first unread message

Jean-Paul Roy

unread,
Feb 19, 1998, 3:00:00 AM2/19/98
to

My usual programming language is Lisp [Scheme in fact], which I am
teaching. Recently I had some interests in computer algebra.
To get quantifiers, I usually ask my students to write a predicate
(every? pred ens) returning true iff every element of E satisfies
pred. Then using every, I ask them to produce (some? pred ens)
returning true iff there is at least one element of E satisfying
pred. No problemm, the solutions are below.

I coded every(pred,ens) in Maple. No problem:

> every := proc(pred,ens)
local i, res;
res := true;
for i to nops(ens) do
if not(pred(ens[i])) then
res := false; break; fi;
od;
res;
end:
> every(isprime,{2,5,7,11});
true
> every(isprime,{2,5,7,9,11});
false

In Mathematica, just to see. Same style, no problem:

In[1]: every[pred_,ens_] :=
Module[{res = True},
Do[If[Not[pred[ens[[i]]]], (res = False; Break)],
{i,1,Length[ens]}];
res]]

In[2]: every[PrimeQ,{2,5,7,9,11}]
Out[2]: False

Then I turned to Maple for some(pred,E) using every. I know I can
do it from scratch, but I *want* to use every for didactic reasons
about negation:

> some := proc(pred,ens)
not(every(x->not(pred(x)),ens))
end:
> some(isprime,{4,8,6,9,5,8});
Error, (in every) cannot evaluate boolean ????????

Ooops. Let's try it with Mathematica:

In[3]: some[pred_,ens_] := Not[every[Function[x,Not[pred[x]]],ens]]]

In[4]: some[PrimeQ,{4,8,6,9,5,8}] (* ok *)
Out[4]: True

Of course, the neat solution with Mathematica uses typed
pattern-matching:

some[pred_,ens_] := MemberQ[ens,x_?pred]

The Scheme solution [of course] works perfectly:

(define (some? pred ens)
(not (every? (lambda (x) (not (pred x))) ens)))

Can someone explain me:

i) why my Maple solution does not work (I even tried with unapply
which seems to modelize lambda-functions, also with proc).
ii) where I can find exact semantics for the Maple programming
language [page number appreciated] explaining this behaviour.

Thanks a lot,

Jean-Paul Roy
Dept. Informatique
Faculte des Sciences de Nice
http://deptinfo.unice.fr/~roy

0 new messages