Singleton: Difference between revisions
Content added Content deleted
(→{{header|TXR}}: New section.) |
No edit summary |
||
Line 1,260: | Line 1,260: | ||
I am a singleton |
I am a singleton |
||
</pre> |
</pre> |
||
=={{header|M2000 Interpreter}}== |
|||
<syntaxhighlight lang="m2000 interpreter"> |
|||
Module CheckSingleton { |
|||
\\ singleton |
|||
\\ pointers and static groups are the same object because |
|||
\\ each one has a pointer to same state (a tuple) |
|||
\\ but from outside we do the miracle to have a static group to act as a pointer |
|||
\\ We need a lambda function to hold the pointer to Singleton as closure |
|||
Global One=lambda M=pointer() (aValue=0)-> { |
|||
If M is type null then |
|||
\\ one time happen |
|||
Group Singleton { |
|||
Type:One |
|||
Private: |
|||
state=(aValue,) |
|||
Public: |
|||
module Add (x) { |
|||
.state+=x |
|||
} |
|||
Set {Drop} |
|||
Value { |
|||
=.state#val(0) |
|||
} |
|||
} |
|||
M->group(Singleton) |
|||
end if |
|||
\\ return M which is a pointer |
|||
=M |
|||
} |
|||
K=One(100) |
|||
Print Eval(K)=100 |
|||
M=One() |
|||
Print Eval(M)=100 |
|||
Print K is M = true |
|||
Print K is type One = true |
|||
K=>add 500 |
|||
Print eval(K)=600 |
|||
\\ copy K to Z (no pointer to Z, Z is named group) |
|||
Z=Group(K) |
|||
Print eval(z)=600, z=600 |
|||
Z.add 1000 |
|||
Print Z=1600, Eval(M)=1600, Eval(K)=1600 |
|||
\\ push a copy of Z, but state is pointer so we get a copy of a pointer |
|||
Push Group(Z) |
|||
Read beta |
|||
Beta.add 1000 |
|||
Print Z=2600, Eval(M)=2600, Eval(K)=2600 |
|||
\\ convert pointer to group (a copy of group) |
|||
group delta=One() |
|||
delta.add 1000 |
|||
Print Z=3600, beta=3600, delta=3600, Eval(M)=3600, Eval(K)=3600 |
|||
\\ M and K are pointers to groups |
|||
M=>add 400 |
|||
Print Z=4000, beta=4000, delta=4000, Eval(M)=4000, Eval(K)=4000 |
|||
} |
|||
CheckSingleton |
|||
</syntaxhighlight> |
|||
=={{header|Lasso}}== |
=={{header|Lasso}}== |