MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Language vs. Library

  • To: mathgroup at
  • Subject: [mg61317] Re: Language vs. Library
  • From: albert <awnl at>
  • Date: Fri, 14 Oct 2005 22:23:06 -0400 (EDT)
  • References: <did3bd$qij$> <difr10$fc2$>
  • Sender: owner-wri-mathgroup at

Hi Steven,
> What I'm trying to identify is which parts of Mathematica are logically 
> more primitive than the others.  
> One think I'm confident of is that the core language is expressed in 
> FullForm, and involves neither boxes nor cells, nor does it require any 
> special characters such as \[Del].  

If you are looking for the core of the language, FullForm is in my opinion
quite a step forward. Remember that even {} is just a shortcut for

If it is about extracting the essentials of Mathematica in order to learn
how to use it better I think it helps much more to have a completley
different point of view than trying to identify which functions (or
symbols) are core and which are not. The following is probably not correct
in every detail and a little oversimplified, but helps me to understand how
Mathematica works. There is a chance that I am completly wrong, anyway :-).

The core of the language are:

1) expressions, made of Atoms (Symbols, Strings, Numbers) and always of the
(full-)form head[arbitrary,number,of,arguments]. I think you can find a
more exact definition and a complete listing of the supported Atoms within
the documentation.

2) replacement rules including very powerful patterns for expressions,
applied to expressions implicitly by the evaluation process and to be
changed, added to and deleted from the system with Functions like Set,
SetDelayed or Clear. The evaluation process can be influenced in various
ways by giving symbols Attributes like HoldAll, Listable, Orderless and

That's it and it's even mentioned somewhere in the documentation:
'Mathematica is a term rewriting system'. 

This oversimplified view would make the chapters about the evaluation
process and pattern matching probably the most important in the
documentation if you seek for the core of Mathematica (understanding these
in detail will also enable you to examine and answer your questions
yourself). This is also the part that is hardcoded and can't be changed in
any way (I think). That's in strong contrast to anything that could be
thought of a 'core' function, see below. And last but not least, the
pattern matcher is probably the most outstanding feature of Mathematica,
compared to other Computer Algebra Systems.

You should also learn that it makes no sense to even try to know all of the
functions or even a complete subset, it is more important to develop a
feeling to identifiy whenever you are trying to solve a problem that
someone else might already has solved and learn techniques to find the
functions/packages that do what you need. These search techniques are
basically provided by the ?-Operator and the HelpBrowser, but could of
course be improved. Sometimes a smart search patterns in google give you
better answers much faster...

To make clear why I wouldn't think it makes much sense to make listings of
core or not so core functions within Mathematica look at this (I am using
For not because I think that it is such an important "core" function, just
because it was mentioned earlier):

In[1]:= Unprotect[For]

Out[1]= {For}

In[2]:= For[___]:=Print["functional fundamentalist weirdo speaking: Don't
use procedural programming, stupid!"]

Now the following:

In[3]:= For[i=1,i<10,i++,Print[i]]

will not show exactly the behaviour you would expect from the 'core' of the
language... And you could do this basically to every function/symbol
(except for a few which happen to have the Attribute Locked) and you will
even find many postings in this group where for special purposes doing
things like this are even recommended. 

The possibility to change the behaviour of alsmost all symbols within
Mathematica is very powerful and on the other hand makes it possible to
produce complete nonesense. IMHO the latter is a general rule: the more
power, the greater the danger of missuse. Producing nonsense is possible
with any other system or language, too, and no special problem with
Mathematica. A healthy skepticism towards any results you receive by
functions (a.k.a. a set of replacement rules :-)) that you can't check
should be recommended, anyway. Especially if you are after 'mathematical
rigour' you better check everything, prefferable with another system. Also,
honestly, I wouldn't enjoy a flight in an airplane controlled by a
Mathematica notebook, but all that doesn't mean I consider Mathematica to
be useless...

And another remark which I know could be challenged in various ways: If you
want comparations to other languages, I think something like XSLT (seen as
handling "pattern matching" and "replacing" of XML "expressions") is much
closer to Mathematica than any of the languages you mentioned. It also
shares the fact that the syntax of the language is the
same as that of the expressions it can handle. (Maybe someone is interested
in writing an CAS in XSLT working on MathML expressions :-)).

Don't expect me to spend much time discussing these statements, since I know
they stand on loose ground and I'm only an "interested layman" concerning
these things. 

And yes, if you want to use Mathematica in an efficient way, you will also
need to know some of it's functions, but I think you can then savely choose
the ones that are helping you most without spending time to find out
whether they are part of the core language or not.


  • Prev by Date: Re: DSolve and matrix form of system of equations
  • Next by Date: Re: DSolve and matrix form of system of equations
  • Previous by thread: Re: Re: Re: Language vs. Library
  • Next by thread: Re: Language vs. Library