Pointers in Wolfram Language
(* Wolfram Language supports references to values and expressions *)
(* We'll show how references work with 2 functions: zeroval and zeroptr *)
(* zeroval takes an integer argument by value *)
zeroval[ival_] := Module[{localVal = ival},
localVal = 0;
]
(* zeroptr takes a reference to an integer *)
zeroptr[iptr_] := (
iptr[] = 0;
)
(* Main function *)
Module[{i = 1},
Print["initial: ", i];
zeroval[i];
Print["zeroval: ", i];
(* Create a reference to i *)
iRef = Hold[i];
(* Pass the reference to zeroptr *)
zeroptr[Function[Null, iRef[[1]], HoldAll]];
Print["zeroptr: ", i];
(* Print the reference *)
Print["reference: ", iRef];
]In Wolfram Language, we don’t have explicit pointers like in some other languages. However, we can achieve similar functionality using references and the Hold attribute.
The zeroval function takes an integer argument by value. It creates a local copy of the argument and sets it to 0, but this doesn’t affect the original value.
The zeroptr function takes a reference to an integer. It uses a pure function with HoldAll attribute to modify the original value.
In the main part of the code:
- We initialize
ito 1 and print its initial value. - We call
zerovalwithi, which doesn’t change the original value ofi. - We create a reference to
iusingHold[i]. - We pass this reference to
zeroptr, which modifies the original value ofi. - Finally, we print the reference itself.
When you run this code, you’ll see that zeroval doesn’t change the value of i, but zeroptr does, because it has a reference to the original variable.
The output will look something like this:
initial: 1
zeroval: 1
zeroptr: 0
reference: Hold[0]This demonstrates how Wolfram Language can work with values and references, providing functionality similar to pointers in other languages.