Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

My current understanding about Mathematica is that everything, at the lowest level, ends up as replacement rules.
First question: is this true?
Second question: does Mathematica "gloss over" these rules by representing them as functions? doesn't seem to be expressed as a rule.

Third question: does the by value/by reference question have any when you "pass" a value to a Mathematica function?

share|improve this question
6  
Well, obviously a system based on rules only, would only be able to do endless expression rewritings, but not much more. Even if one can build such a model of computation consistently, this is not what we see in Mathematica. From the user's viewpoint, (many) built-in functions are terminals, because their actions are no longer governed by rules. For example, when Mathematica sees Sin[0.15], it calls the built-in numerical implementation of Sin to make a computation - at which point it arguably leaves the rule-based paradigm. And similarly for most other useful lower-level actions. –  Leonid Shifrin Oct 22 '13 at 1:56
2  
I was tempted to edit your title: "Do rules rule?" But my nose is still bleeding as a result of a limerick. –  belisarius Oct 22 '13 at 2:19
3  
Have a look at DownValues[f] that's where the rules are hiding in this case –  ssch Oct 22 '13 at 2:25
1  
Rules are not capable to express many underlying results produced by Mathematica. For example consider what Reduce can do better than Solve, for more details read this post: What is the difference between Reduce and Solve? –  Artes Oct 22 '13 at 2:33
2  
@GeorgeWolfe Your simple function is a rule. The only top-level (user-defined) functions in Mathematica which are not rules, AFAIK, are pure functions (defined using Function). –  Leonid Shifrin Oct 22 '13 at 2:56

1 Answer 1

up vote 4 down vote accepted

When you define a function f, you are (a) applying Set or SetDelayed to a pattern, (b) creating a rule, (c) associating the rule with a symbol (f), and (d) storing that in DownValues (usually).

FullForm[Hold[f[x_] := x^2]]
(* Hold[SetDelayed[f[Pattern[x, Blank[]]], Power[x, 2]]] *)

f[x_] := x^2
DownValues@f
(* {HoldPattern[f[x_]] :> x^2} *)

First question: is it true that "everything in Mathematica is ultimately stored as a rule?"

No: for example 2 is not a rule. It's just 2. So not everything is a rule, just functions. Everything is an expression, ... some expressions (as a side-effect) create and store rules in DownValues.

Second question: does Mathematica "gloss over" these rules by representing them as functions?

Yes and no. They give you a glossy shortcut for input:

f[x_] := x^2

instead of requiring you to write something like

AppendTo[DownValues[f], HoldPattern[f[x_]] :> x^2]

There was one misunderstanding in your question; you asked about the output of

FullForm[f[x]]

This is not showing you the definition of the function f. It is showing you the result of applying f to x. See the following:

FullForm[f[2]]
(* 4 *)

If you want to see the definition of f you should either use Information (which is glossy and not very useful) or DownValues which contains what you're after.

Third question: does the by value/by reference question have any when you "pass" a value to a Mathematica function?

Work on the assumption that Mathematica is pretty smart "under the hood" about pass by value/ pass by reference.

share|improve this answer
1  
Also comments (* ... *) and Mathematica packages are not stored as rules. They are not even expressions. –  Rolf Mertig Mar 4 at 4:53

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.