Um auf den versteckten Listenimplementierungen die vielen möglichen Listenoperationen durchführen zu können, gibt es eine Reihe von vordefinierten Schleifentypen. Was die Schleife wirklich macht, wird mit einem Mechanismus bestimmt, der eng an das Callback-Prinzip [32, S. 31,] angelehnt ist: Der Anwendungsprogrammierer übergibt eine Funktion, die in der Schleife für jedes Element der Liste aufgerufen wird.
Die Programmierpraxis zeigt, daß in den meisten Fällen nur wenige Schleifentypen benötigt werden:
Die Menge der sinnvollen Funktionen, die vom Anwendungsprogramm übergeben und in diesen Schleifen aufgerufen werden, läßt sich auf wenige Typen zurückführen. Ihnen ist gemeinsam, daß sie jeweils mit drei Parametern aufgerufen werden: Das erste Argument ist das zur Verarbeitung anstehende Element der Liste, in CLS meistens ein Objekt. Das zweite Argument ist die sogenannte ,,client-data``; diese ist für alle Elemente während eines Schleifenaufrufes gleich und wird der Schleifenfunktion von außen übergeben. Das dritte und letzte Argument ist die sogenannte ,,call-data``. Sie wird von der Schleifenfunktion bereitgestellt oder verwaltet.
Beispiel: clsPointGetCoords erwartet als Element einen CLS-Punkt und schreibt seine Koordinaten in das Feld client-data unter Berücksichtigung der Dimension an jene Position, die der laufende Index ,,call-data`` angibt. Dieser wird von der Schleifenfunktion clsListDo entsprechend erhöht.
Beispiel: clsPredicateAttributeType liefert vTRUE, falls das Element ein CLS-Attribut ist, und den mit client-data angegebenen Attributtyp hat. Damit kann aus einer Liste von CLS-Objekten ein bestimmtes Attribut gesucht werden.
Beispiel: clsCritLineAngle erwartet eine Linie im zweidimensionalen Raum und berechnet ein dem Winkel ähnliches Kriterium nach Transformation der Linie mit der als client-data übergebenen Matrix. Das Resultat wird über den Zeiger des dritten Argumentes retourniert. Damit kann die Schleifenfunktion clsListGetMin aus der Liste der Linien, die einen Punkt berühren, zu einer Linie die nächste finden.
Beispiel: clsReplaceLineOrientByPoint erwartet als Element eine Linie und als client-data einen Punkt und prüft, ob der Punkt der zweite der Linie ist. Wenn ja, dann gibt die Funktion eine negative Referenz auf die Linie zurück. Damit kann die Schleifenfunktion clsListDoReplace alle Referenzen eines Punktes auf die ihn berührenden Linien vom Punkt weg orientieren.
Wichtig für die Zusammenstellung eines ,,Software-Baukastens`` ist ein weiterer Funktionstyp, der nicht auf Listenelementen arbeitet:
clsCompareFunc vergleicht zwei Werte eines Typs und liefert, entsprechend der C-Funktion strcmp, eine negative oder positive Zahl oder 0 mit den Bedeutungen erster Wert ist kleiner, größer oder gleich dem zweiten. Hier ist das erste Argument die client-data.
Beispiel: clsCompareDouble vergleicht zwei double Zahlen miteinander. Diese Funktion wird in obigem Beispiel zu clsCritFunc von clsListGetMin benötigt, um die jeweiligen Rückgabewerte zu vergleichen.
Die Verbindung der Listen zu den PIF-basierten CLS-Objekten ergibt sich daraus, daß zu jedem CLS-Objekt eine Liste seiner Kindobjekte, eine Liste seiner Referenzen auf andere Objekte und eine Liste der Rückreferenzen auf alle dieses Objekt referenzierenden Objekte (sowie ein Zeiger auf das Mutterobjekt) geführt wird.
Mit den Funktionen clsObjectGetChildren, clsObjectGetRefs und clsObjectGetBackrefs können diese Listen explizit ,,herausgeholt`` werden. Um dem Programmierer bei einfachen Such- oder Abfrageoperationen das Anlegen einer Listenvariable und das abschließende Löschen der Liste zu ersparen, sind auch entsprechende Abfragefunktionen implementiert, die die zuvor erwähnten Listenoperationen mit den clsObjectGet...-Funktionen verbinden, z.B. clsObjectFindBackref mit Predikatfunktion.
Um Operationen auf dem PIF-bezogenen Datenbestand vorzunehmen, existieren Funktionen der Art clsObjectAddReference, clsObjectRemoveChild und clsOrthoproductAddBase sowie Abfragefunktionen wie clsAttributeGetIntegerItem und clsPointlistGetUnit.