Re: Comparison between Mathematica and other
- To: mathgroup at smc.vnet.net
- Subject: [mg92562] Re: Comparison between Mathematica and other
- From: AES <siegman at stanford.edu>
- Date: Sun, 5 Oct 2008 06:06:22 -0400 (EDT)
- Organization: Stanford University
- References: <200809301133.HAA21932@smc.vnet.net> <gc7frc$en0$1@smc.vnet.net>
> > > Transpose[
> > > Sort[Transpose[Eigensystem[RandomReal[{-1, 1}, {6, 6}]]],
> > >
> > > Re[#2[[1]]] < Re[#1[[1]]] ||
> > > Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
> > >
> > > I think this also is a good example of the use of functional programming,
> > > and it helped me to get in to it.
> > > In Mathematica we are thus able to sort any kind of "objects" with any
> > kind
> > > of sorting criteria, thanks to the generality of the language.
I'm really not attempting to re-open the functional vs procedural
programming battle here, but I'd offer a couple or three observations on
the above:
1) Commands like Sort[ ], Transpose[ ], Re[ ] are evidently "functions"
and I suppose these functions contain massive levels of sophisticated
functional programming (and pattern matching) in their internals -- --
but just using them as functions doesn't, it seems to me, really
constitute hard-core "functional programming" by those users who do
this.
Their names are ordinary English or mathematical terms; what they do (or
are likely to do) will seem obvious to even the most unsophisticated
user; and they can be readily used even by unsophisticated (or entirely
procedurally oriented) users, at least in their default modes, without
even knowing what functional programming is -- that is, without such
users learning (or having to remember) any kind of arcane symbols or
functional programming notations or structures, and especially any
symbols and notations that are not used in and familiar from, say,
elementary algebra or calculus.
Just using -- or even defining for yourself -- a named function (macro,
subroutine, whatever) doesn't seem to me "functional programming" at any
very meaningful level; and doing this certainly doesn't depend on the
"generality" of Mathematica as a language. These same capabilities are
certainly present, and commonplace, in what I believe are labeled as
crudely "procedural languages" (FORTRAN, BASIC, etc).
2) Now it's certainly true that if you want to modify the default
behavior of Sort[ ], you do indeed have to be able to do (or more likely
copy and modify) what I'd agree is some very modest level of procedural
programming, as well illustrated in the example above:
Re[#2[[1]]] < Re[#1[[1]]] ||
Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
But even I (a resolutely procedural type) would have little trouble with
this particular example, since the level of 'arcanity' is really pretty
limited: The "#n" notation for arguments is familiar from TeX (and what
other languages?); the "||" and "&&" notations are familiar from
low-level logic classes; and the "==" and "[[ ]]" notations are pretty
basic Mathematica. The only 'arcane' thing (for me) is the single "&"
at the end, which I have no idea why is there, but I'll dutifully copy
it.
3) As a fallout from this, I'll continue to argue that if Mathematica
really wants to expand and serve the widest possible customer base --
e.g., high school math and physics students, college students (and grad
students) in nontechnical fields, working engineers in industry, etc. --
for those audiences (aka customers) it should:
1) Substantially sharpen its focus on making and keeping Mathematica
simpler and easier to use and much easier to learn for those audiences,
including a focus on better documentation and fewer complexities and
"gotchas" (which is not imply taking away any of the pattern matching
and functional programming underpinnings that are so crucial to other,
more sophisticated users of Mathematica); and
1) Drastically reduce its prices.
--AES, Oct 2008
- Follow-Ups:
- Re: Re: Comparison between Mathematica and other
- From: Murray Eisenberg <murray@math.umass.edu>
- Re: Re: Comparison between Mathematica and other