DEFINITION MODULE lists2; (* Länkade lagringsstrukturer: listor, med pekare & dynamisk minnesallokering. *) TYPE List; (* Typen är abstrakt (hemligt). *) TYPE Info = INTEGER; (* Typen på elementen i listan *) (* === Konstrurerare === *) PROCEDURE nil():List; (* tomma listan *) PROCEDURE cons(x:Info; xs:List):List; (* cons lägger till x först i listan xs *) (* === Predikat === *) PROCEDURE null(l:List):BOOLEAN; (* null testar om en lista är tom *) (* Selektorer *) PROCEDURE hd(l:List):Info; (* hd ger första elementet i listan l *) PROCEDURE tl(l:List):List; (* tl ger resten av listan l utan första elementet *) (* Uppdateringsoperationer *) PROCEDURE changeHd(l:List; x:Info); (* byter ut första elementet i listan l mot x *) PROCEDURE changeTl(l:List; l2:List); (* byter ut resten av listan efter första elementet mot l2 *) END lists2.