MathGroup Archive 2008

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

Search the Archive

Re: Pure functions?

  • To: mathgroup at
  • Subject: [mg93260] Re: Pure functions?
  • From: David Bailey <dave at>
  • Date: Sat, 1 Nov 2008 05:10:54 -0500 (EST)
  • References: <geee7b$a9g$>

AES wrote:
> This is a follow-on to the thread "Notation using # with exponents and 
> &", renamed to focus on the question in the Subject line.
> In asking questions about the term pure function, I'm not trying to be 
> contentious or argumentative.  I'm just trying to learn a bit about the 
> concept.
> When I search on this term in Google, Wikipedia is the first hit that 
> comes up, with the opening statement:
> --------------------
>    In computer programming, a function may be described as pure 
>    if both these statements about the function hold:
>    1. The function always evaluates the same result value given 
>    the same argument value(s). The function result value cannot 
>    depend on any hidden information or state that may change as 
>    program execution proceeds, nor can it depend on any external 
>    input from I/O devices.
>    2. Evaluation of the result does not cause any semantically
>    observable side effect or output, such as mutation of mutable 
>    objects or output to I/O devices.
>    The result value need not depend on all (or any) of the argument
>    values. However, it must depend on nothing other than the 
>    argument values.
> ---------------------
> I appreciate that Wikipedia is not always authoritative; and its 
> coverage of this particular topic is neither lengthy nor particularly 
> detailed.  Still, it's what's in there, at the moment.
> The Mathematica documentation for & opens with:
> ---------------------
>    'body &' is a pure function. The formal parameters are 
>    # (or #1), #2, etc.
> ---------------------
> and then shortly thereafter:
> ---------------------
>    When Function[body] or body& is applied to a set of arguments, 
>    # (or #1) is replaced by the first argument, #2 by the second, 
>    and so on. #0 is replaced by the function itself. 
> ---------------------
> So let's consider the constructs:
>         f1 = #1^3 + #2^4 &
>         f2 = #1^x + #2^y &
> both of which function perfectly well (I think) as pure functions in the 
> Mathematica sense.
> My initial (and admittedly naive) interpretation is that f1 is also a 
> pure function per the Wiki definition, because  it "always evaluates the 
> same result value given the same argument value(s)" and "the function 
> result value [does not] depend on any hidden information or state that 
> may change as program execution proceeds" (unless of course someone 
> goes so far as to redefine the meanings of "3" or of "4"!).
> The function f2 is not pure in the Wiki sense, however (at least, that's 
> my again admittedly naive interpretation), because f2[arg1,arg2] can 
> give very different results when used in different parts of a program, 
> since its result depends on "hidden" information (hidden in some sense, 
> anyway) about the values that may have been assigned to the parameters x 
> and y elsewhere in the program.  
> And, given the quotes from the Mathematica definition, it seems clear 
> that x and y are not "formal parameters" or accessible "arguments" of 
> the function  f2.  So, the result of f2 does clearly "depend on 
> [something] other than [just] the argument values".
> Finally, Mathematica seems to put some focus on the _unnamed_ (or 
> "anonymous") property of its pure functions, while the Wiki statement 
> makes no mention at all of this.
> So, what _is_ the real story on "pure functions"?
Clearly it is an unfortunate clash of terminology - surely there isn't 
much more to say on this!

David Bailey

  • Prev by Date: Re: Graph by Date
  • Next by Date: Re: Pure functions?
  • Previous by thread: Re: Pure functions?
  • Next by thread: Re: Pure functions?