Re: Pure functions?

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

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
http://www.dbaileyconsultancy.co.uk

• 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?