Icon ist eine höhere, strukturierte Programmiersprache, die Ralph E. Griswold ab 1977 an der University of Arizona als modernen Nachfolger von SNOBOL4 entwarf; die erste Version erschien 1979. Icon verbindet die Textstärke von SNOBOL mit einer an Pascal und C erinnernden Syntax.
Goal-directed Evaluation
Das Herzstück von Icon ist die zielgerichtete Auswertung (goal-directed evaluation): Ein Ausdruck liefert entweder einen Wert und Erfolg oder schlägt fehl. Fehlgeschlagene Teilausdrücke lösen automatisch Backtracking aus – vergleichbar mit Prolog, aber eingebettet in eine imperative Sprache.
procedure main()
every i := 1 to 10 do
write(i)
end
Das Schlüsselwort every erzwingt alle Ergebnisse eines Generators. Auch suspend (Wert liefern und später fortsetzen) und fail (Fehlschlag melden) steuern Generatoren.
String-Scanning
Für Textarbeit bietet Icon das String-Scanning: Mit s ? expr wird eine Zeichenkette zum aktuellen Scan-Kontext, in dem Positionen untersucht und verändert werden.
procedure main()
s := "alpha,beta,gamma"
s ? {
while tab(upto(',')) do
write(tab(many(',')) | "")
}
end
Die wichtigsten Scan-Funktionen sind tab() (bis Position vorgehen und Teil zurückgeben), move() (n Zeichen), upto() (Position eines Zeichens aus einer Menge), many() (alle Zeichen einer Menge), any(), find() (Teilstring suchen) und bal() (balancierte Klammern).
Praktische Hinweise
- Strukturen:
list(),table()(assoziative Arrays),set() - Konvertierungen:
integer(),string(),cset() - Compiler
icont, Interpretericonx
Icon blieb über zwei Jahrzehnte aktiv und mündete schließlich in die objektorientierte Erweiterung Unicon.