Naar inhoud springen

Icon (programmeertaal)

Uit Wikipedia, de vrije encyclopedie
Icon
Icon
Paradigma imperatief, gestructureerd
Verschenen ca. 1978
Ontworpen door Ralph Griswold en anderen
Huidige versie v9.5.23a[1] Bewerken op Wikidata
19 augustus 2023; 5 juni 2013
Typesysteem dynamisch
Beïnvloed door SNOBOL, Algol
Invloed op Python
Besturingssysteem Multiplatform
Website Projectpagina
Portaal  Portaalicoon   Informatica
Vrije software

Icon is een programmeertaal die ontworpen is voor niet-numerieke toepassingen, in het bijzonder voor het verwerken van tekst (strings). Icon werd in de tweede helft van de jaren 1970 ontwikkeld aan de universiteit van Arizona door Ralph Griswold, Dave Hanson en anderen.[2][3] De functionaliteit van Icon was vergelijkbaar met die van SNOBOL4, maar de syntaxis van Icon was moderner dan die van SNOBOL4, waarvan de syntaxis nog op verwerking met ponskaarten gericht was. De syntaxis van Icon heeft gelijkenissen met die van Pascal (bijvoorbeeld ":=" om een waarde toe te kennen) en C, maar er zijn ook een aantal verschillen. Zo hoeft een bevel niet te eindigen op een ";" aan het einde van een regel.

Icon werd nadien verder ontwikkeld en zit momenteel (jaar 2013) aan versie 9.5, verkrijgbaar voor Unix-, Linux- en Macintosh- (met Intelprocessor) systemen. Het draait ook onder Cygwin op Microsoft Windows.

Icon is een hogere programmeertaal met diverse voorzieningen voor het werken met tekenstrings en complexere datastructuren zoals lijsten, records, sets (verzamelingen) en associatieve arrays. De taal is imperatief en niet objectgeoriënteerd.[4] Variabelen hoeven niet gedeclareerd te worden. Icon gebruikt dynamic typing: Het type van een variabele kan variëren tijdens de uitvoering van een programma. Eenzelfde variabele kan op verschillende tijdstippen een geheel getal voorstellen, een string, een set (verzameling), of een ander type.

Een Icon-programma bestaat uit een aantal procedures, die al dan niet een aantal argumenten hebben en al dan niet een waarde teruggeven aan de oproepende procedure met het return-bevel. Een procedure eindigt met het bevel end. Hier is een eenvoudige procedure om het grootste van twee getallen te bepalen:

procedure max(i,j)
    if i > j then return i else return j
end

Elk programma heeft een procedure "main" waarmee de uitvoering start.

Icon heeft traditionele control flow-structuren, zoals if-then-else en while-do. Lussen worden ook doorlopen met het bevel every - do ("do" is optioneel), bijvoorbeeld:

every n := i to j by k do ...

Een Icon-expressie "lukt" en produceert een waarde, of "mislukt". Een generator is een uitdrukking of een procedure die meerdere waarden kan produceren. Bij herhaaldelijke evaluatie levert de generator een nieuwe waarde, totdat hij mislukt. De uitdrukking "i to j by k" is een voorbeeld van een generator. Een andere generator is de functie "find":

find(s1, s2)

die alle plaatsen in string s2 vindt waar string s1 voorkomt. Het bevel:

every i:=find("or", s) do write(i)

drukt elke positie waarin "or" voorkomt in de string s. De generator "find" wordt herhaaldelijk geëvalueerd totdat hij mislukt en geen waarde geeft. Dan gaat de uitvoering verder met het volgende bevel. Dit bevel kan nog compacter geschreven worden als:

every write(find("or", s))

Het mechanisme waarmee in Icon uitdrukkingen geëvalueerd worden, is "doelgericht" (goal-directed): Icon forceert elke (sub)expressie om zoveel mogelijk waarden te produceren. Bijvoorbeeld: de uitdrukking

 2 < (1 to 5)

produceert de waarden 3, 4 en 5, en mislukt dan.

Met generators en goal-directed evaluatie kan men in Icon zeer compacte programma's maken met impliciete control flow.

[bewerken | brontekst bewerken]