Die im folgenden verwendete Notation ist typisch, aber nicht genormt.
ADT Lists(T) ISDie Operationen newlist und cons sind Konstruktoren, die anderen Operationen sind Projektoren. Grundterme werden mit newlist und cons aufgebaut, oder sind Grundterme der Sorten boolean oder T. Beispielsweise läßt sich die Sequenz <1, 2, 3, 4> als Term schreiben: cons(1, cons(2, cons(3, cons(4, newlist )))); und daß hier so viele Klammern stehen, wie öfters in LISP, ist kein Zufall.
SORTS:
list, T, boolean
OPERATIONS:
newlist: list
cons: T list list
head: list T
tail: list list
isempty: list boolean
RULES:
isempty(newlist) = true
isempty(cons(x, l)) = false
head(cons(x, l)) = x
tail(cons(x, l)) = l
END Lists.
Die Operationen head und tail sind partielle Funktionen; manche Terme wie tail(newlist) lassen sich daher nicht auf Grundterme zurückführen. Sie bezeichnen demnach keine Objekte; in einer Implementierung ergeben sie keinen Sinn, und sie sollten möglichst als Fehler erkannt werden.
Abstrakte Datentypen werden durch funktionale Sprachen und auch manche objektorientierte Sprachen recht gut unterstützt; in imperativen Sprachen wie etwa Modula 2 ergeben sich oft rein technisch bedingte Einschränkungen, bei denen man sich geeignet behelfen muß. So sind meist nicht alle Typen als Funktionsresultate zugelassen; dann arbeitet man statt dessen mit Ergebnisparametern, muß aber daher Resultate zwischenspeichern.