Dear Ralf, oldk1331 and Themos, thanks for your answers.
I'll comment on/answer various points below and I'll make up a list of my
impressions in another "constructive criticism" post.
>That's an interesting skill set. May I ask how did you get in touch
>with FriCAS?
I heard about Axiom more or less when I ended my PhD and Axiom was commercial.
At that time I computed in Macsyma (without x). Then in my post-doc I started
using Mathematica. Got a job and more time for "CAS fun", I started to look
around for viable Open Source alternatives to Mathematica (say beginning 2000).
I became aware that Axiom was OS but I was scared by the immensity of its
documentation, the strong type system, and by what seemed to me a slow source
development. I followed the Aldor transition to OS looking from time to time at
the forum, and after a while I realized that there were no more one but three
"Axioms" around. FriCAS looks to me the healthier project. (The strong type
system fear evaporated meanwhile thanks to a little immersion in Haskell.)
Concerning my question on evaluation, the motivation is just theoretical, to
understand the evaluation mechanism: I have no precise application in mind.
@oldk1331 and @Themos, thanks for suggesting delayed assignment. I knew about
==. If I write (a==b; b==1; a) then a is evaluated with b bound to 1. The post
was more about understanding of "what is a on the LHS and b on the RHS of the
assignment", that why I used := .
@oldk1331:
>Do you have any problems on installation?
I've installed installed the binaries in a test machine (linux debian) this we.
I'll talk about problems I faced in the "constructive criticism" email.
@oldk1331:
>The "fixed-point infinite evaluation" sounds like delayed assignment
>I mentioned above.
Mmm... in my Mathematica-biased understanding, immediate evaluation and delayed
evaluation refer to *when* the RHS of an assignment is evaluated, at the
assignment time or when a variable is re-used. My question was not about when
evaluation is performed but more about *how* evaluation is performed. In
Mathematica assignments ( = immediate and := delayed) define immediate or
delayed global rules that are stored somewhere in the environment and
evaluation means "repeatedly apply all the rules in scope until the result does
not change". That is what I meant by "fixed-point infinite evaluation" and the
they point is the fact that the rules are repeatedly evaluated.
@oldk1331:
> BTW, is this possible in Sympy?
In my knowledge, in Sympy the LHS of an assignment is a plain python variable
and in the RHS one has an object representing a mathematical object, say an
expression. Assignment of a python variable is immediate (unless one cheats and
uses a nullary function, but that has an heavy function-like syntax). There is
no rule-storing and repeated application as in Mathematica. I'm not aware of a
way to automatically have this fixed-point evaluation. On the other hand I
guess that if one has an *explicit* list of rules one might create a function
that applies them until the result is fixed.
@Ralf
Thanks for your enlightening explanation!
If I understand correctly, the "variables" on the LHS of assignments are Aldor
(whatever) variables that are bound (refer to) to more complicated Aldor
objects with type in some domain, like Variable(b).
Let me write down another example to test if I've understood (could you tell me
if I'm wrong?)
a:=a
-- "a" on the LHS is an Aldor variable (a reference to an object) , "a" on the
RHS is an object of type Variable(a) coercible to Symbol.
a:=1
-- "a" on the LHS is the same Aldor variable as above. "a" now reference to
"1:Integer" and the value a:Variable(a) -- no mor linked -- disappears from the
scope.
f(x) == x+a -- who is "a" on RHS?
f(z)
--- => z+1 so "a" above was an Aldor variable
If my understanding is correct, the situation is pretty much like Sympy, [1],
where you would write the above test as
a = Symbol("a")
-- "a" on LHS a python ref. On the RHS you create explicitly a Symbol
object named "a".
a = 1
-- "a" on LHS a python ref.
def f(x): return x+a
-- "a" on LHS a python ref, presently bounded to 1.
f(Symbol("z"))
-- returns Symbol("z")+1, which is shown as z+1
[1] http://docs.sympy.org/latest/gotchas.html#variables
>For example, tell me a CAS that distinguishes between a (multivariate)
>polynomial that is "distributed" (i.e. stored as a list of pairs where
>each pair consists of a coefficient and the corresponding exponent
>vector of the variables) or that is "recursive" (i.e. it is a
>(univariate) polynomial in the main variable whose coefficients are
>(recursive) polynomials in the other variables.
I understand. (Actually it seems that also mathemagix [2] does it :) but I'm
not a mathemagix user. )
[2] http://www.mathemagix.org/www/multimix/doc/html/multivariate.en.html
Thanks,
ric
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.