History variables: Difference between revisions

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

</pre>
</pre>