Die Abfrage auf gleiche Wertefolgen ist aufwendiger; sehen wir uns dazu erst ihre funktionale Definition an:
isequal(newlist, newlist) = trueBei der Implementierung in Modula 2 müssen wir darauf achten, daß wir keine NIL-Werte dereferenzieren dürfen, und daß ein Objekt sich selbst gleich ist.
isequal(newlist, cons(a,x)) = false
isequal(cons(a,x), newlist) = false
isequal(cons(a,x), cons(b,y)) = ((a = b) isequal(x,y))
Dies läßt sich auch iterativ formulieren, wobei die beiden Wertparameter p und q die beiden Listen soweit wie nötig durchlaufen; hier haben wir ein Beispiel dafür, daß eine LOOP-Schleife nicht mit EXIT, sondern mit RETURN verlassen wird.PROCEDURE isequal(p, q: liste): BOOLEAN; BEGIN IF p = q THEN RETURN TRUE ELSIF p = NIL THEN RETURN FALSE ELSIF q = NIL THEN RETURN FALSE ELSE RETURN (p^.wert = q^.wert) AND isequal(p^.nach, q^.nach) END; END isequal;
PROCEDURE isequal(p, q: liste): BOOLEAN; BEGIN LOOP IF p = q THEN RETURN TRUE ELSIF p = NIL THEN RETURN FALSE ELSIF q = NIL THEN RETURN FALSE ELSIF p^.wert <> q^.wert THEN RETURN FALSE ELSE p := p^.nach; q := q^.nach; END; END; END isequal;