MathGroup Archive 2009

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

Search the Archive

Re: New free introductory book on Mathematica programming,

  • To: mathgroup at
  • Subject: [mg96532] Re: New free introductory book on Mathematica programming,
  • From: "Richard Trilling" <rich.bis at>
  • Date: Mon, 16 Feb 2009 06:53:50 -0500 (EST)
  • References: <> <gn5u4f$glh$>

Many thanks, goes way beyond and introduction, will prove to be highly 

"peter" <plindsay.0 at> wrote in message 
news:gn5u4f$glh$1 at
> This is terrific stuff, thank you.
> Peter
> 2009/2/12 Leonid Shifrin <lshifr at>:
>> Dear Group,
>> This is my first post here, although I have been
>> a long-term Mathematica user. My field is (more correctly,
>> was until recently) Theoretical and Mathematical Physics.
>> I have been using Mathematica for about 12 years now,
>> but only the last 4 as a programmer. Being a Mathematica
>> enthusiast, I have written an introductory book (well, a
>> first part of it) on Mathematica programming based on my
>> own experiences and my compilation of existing literature,
>> as an expansion of notes-to-self. The motivation was to
>> minimize frustration of learning Mathematica programming for
>> someone like myself 4 years ago.
>> My experience is that, for a beginner, it is easiest to learn
>> Mathematica (programming) when it is illustrated with many simple
>> examples and is as much separated from any field-specific
>> application as possible. This is what I tried to do in the
>> book.
>> What I had in mind was a pure programming book about Mathematica
>> language, with no reference to any specific field-related
>> functionality, with lots of examples being small but complete
>> projects, less comprehensive than Mathematica book but containing more
>> substantial programs, easier to read than Roman Maeder's books
>> (but by no means a substitute), more applied than David Wagner's
>> (apart from the fact that it is out of print), going a little deeper into
>> the language core and being somewhat more pragmatic than
>> Paul Wellin et al (please don't get me wrong - these are all excellent
>> books), and centered around functional programming layer, main
>> higher-order functions, idiomatic Mathematica programming and
>> efficiency.
>> An ideal reader for it would be a person who has some Mathematica
>> experience as a user, needs to write programs more substantial
>> than a few one-liners, and wants to understand the logic of the
>> language and ways to program idiomatically, minimize programming
>> effort and maximize program's efficiency. Parts of the book
>> (chapters 1-4) can also be useful for more occasional Mathematica
>>  users, and the last chapter may be of some interest to more
>> experienced users as well.
>> I much hope that the book will be not completely useless  and
>> that I will get some feedback which will help me improve it.  If you 
>> think
>> that some material is described inaccurately, or missing, or unnecessary,
>> or whatever, please let me know!
>> The book is available for free from my web site,
>> <>,
>> and is published under Creative Commons Non-commercial
>> share-alike License. It is possible to read it online or
>> download a pdf version.
>> Apart from the book, I have made several tools that I use
>>  myself and that I believe could be of interest to
>> some Mathematica users. I plan to sumbit them to MathSource
>> soon, but will appreciate any feedback even before that,
>> while they are in "alpha".
>> All packages are accompanied by Mathematica notebooks with
>> numerous examples of use and explanations of all package's
>> features. They have been all tested with v.5.2 and 6.0,
>> although perhaps my test suits were too thin. The following
>> packages are currently freely available  from the same web site,
>> <>:
>> *******************************************************************************************
>> - Cache
>>    Creates a cached version of a given function and
>>    fetches results of frequent function calls  from cache
>>    of a fixed user-defined size. Slower than f[x_]:=f[x]=...
>>    idiom, but you control the size of DownValues list. Can
>>    be useful for functions which are at least minimally
>>    computationally demanding, in unattended computations.
>> - UnsortedOperations
>>    Reasonably fast functions to do various manipulations
>>    with several lists without sorting, such as mapping
>>    a function on elements of one list being members of
>>    another one, unsorted Union, Intersection, Complement,
>>    etc. This package is an expansion of the last case
>>    study in the last chapter of the book.
>> - AttributesOfPureFunctions
>>    Produces new pure functions at run-time, with the
>>    desired sets of attributes but otherwise the same as
>>    the original ones. Can also "wrap" the "normal"
>>    (DownValue-based) function into a pure function wrapper,
>>    with the pure function sharing with the original all
>>    Attributes that make sense for pure functions.
>> - CheckOptions
>>    For any user-defined (or modified) DownValue-based
>>    option-taking function, which uses the ___?OptionQ to
>>    declare options, adds new definitions that check
>>    options for validity (not just the option name, but
>>    also the option's rhs) and can execute arbitrary user-
>>    defined code upon receiving inappropriate option(s) (such
>>    as returning $Failed, Throw-ing an exception, etc).
>>    The limitations are discussed in :Discussion:
>>    section of the package documentation.
>> - PackageOptionChecks
>>    Elevates the functionality of  CheckOptions to the level
>>    of the package(context), while retains the control on
>>    the level of individual functions as well. Adds an
>>    easy-to use interface to "protect" package's functions
>>    from inappropriate options. Can work from within the
>>    package of interest, or "externally" (in the latter case
>>    no code modifications for the package itself are needed).
>>    Can be also used for Global` context during interactive
>>    development (before putting functions into a package).
>>    Essentially, allows to "meta-program" the package by
>>    specifying the response actions for each function after
>>    (and independently) of the main function's code, and
>>    gives the user external control over this responding
>>    behavior. Can also be used as a debugging tool.
>>    Limitations are discussed in the :Discussion: section of
>>    the package documentation.
>> - PackageManipulations
>>    Allows to dynamically reload, clear or remove the
>>    package's context in a way consistent with general
>>    package mechanics in Mathematica. Useful for interactive
>>    package development, especially for larger projects with
>>    many inter-dependent packages. Dynamic re-loader tracks
>>    escaping symbols and (optionally) can automatically
>>    resolve possible shadowing problems occuring before or
>>    during re-loading.
>> - PackageSymbolsDependencies
>>    For a given package/context, answers the following
>>    questions:
>>    1. Do there exist symbols in other contexts that
>>    depend on symbols in a given one through some global
>>    properties (DownValues etc)
>>    2. If so, what they are
>>    3. For a given arbitrary Mathematica expression, what
>>    are the symbols used to build it, and their contexts
>>    4. Whether or not a given symbol is shadowed
>>    The package is highly customizable, with its efficiency
>>    depending mainly on how much we know about the set of
>>    possibly dependent symbols. It can be used to analyze
>>    inter-context dependencies in larger projects, and to
>>    discover/monitor modifications that a given package
>>    induces in other contexts (including overloading system
>>    functions). This is also a good practical example of
>>    <PackageOptionChecks> in action, since options here are
>>    protected with PackageOptionChecks.
>> *************************************************************************************
>> If you intend to use any of these, I will be happy, but  please read the
>> disclaimer on my web site. If you find bugs in the packages or in the 
>> book,
>> I will also greatly appreciate if you let me know - please see the
>> <report_bug> section of my web site.
>> Everybody thanks a lot for attention,
>> and Best Regards!
>> Leonid Shifrin

  • Prev by Date: Re: Shortest Path Problem
  • Next by Date: Fw: New free introductory book on Mathematica programming, and a few
  • Previous by thread: Re: New free introductory book on Mathematica programming,
  • Next by thread: Re: New free introductory book on Mathematica programming, and a few