History variables: Difference between revisions

m
(Added Algol W)
Line 595:
</lang>
=={{header|Elena}}==
ELENA 3.4.x :
<lang elena>import extensions.;
import system'collections.;
import system'routines.;
import extensions'routines.;
class HistoryVariable
{
T<Stack> _previous previous := Stack new. Stack();
object value;
prop object prop Value :: _value.
{
]get() = value;
set Value:v
[
if set(nil != _valuevalue)
[{
_previousif push(_value(this value) != nil)
]. {
previous.push(this value)
[ };
[
_valuethis value := nilValuevalue
]}
[}
_value := vundo()
] {
ifnot (_previous previous.isEmpty())
undo {
_valuevalue := _previous previous.pop()
] }
else
{
value := nil
}
}
enumerator() => _previous.previous;
undo
[
ifnot (_previous isEmpty)
[
_value := _previous pop
];
[
_value := nilValue
]
]
get string Printable() => this value;
enumerator => _previous.
T<literal> literal => _value.
}
public program()
{
[
var o := HistoryVariable new. HistoryVariable();
o .Value := 5.;
o .Value := "foo".;
o .Value := o .Value + "bar".;
console .printLine(o).;
o .forEach:printingLn.;
o .undo; undo; ().undo().undo();
console .printLine(o .Value ?? "nil").
]}</lang>
{{out}}
<pre>
Line 653 ⟶ 658:
foo
5
nil
 
</pre>
 
Anonymous user