Ikone (Programmiersprache)

Ikone ist geleitete Ausführung einer Absicht der Aufmachung der Programmiersprache sehr auf höchster Ebene und viele Möglichkeiten, um Schnuren und Textmuster zu führen. Es ist mit SNOBOL und SL5, Schnur-Verarbeitungssprachen verbunden. Ikone ist nicht objektorientiert, aber eine objektorientierte Erweiterung genannt das Idol wurde 1996 entwickelt, der schließlich Unikone geworden ist.

Grundlegende Syntax

Die Ikonensprache wird aus der Algol-Klasse von strukturierten Programmiersprachen abgeleitet, und hat so Syntax, die C oder Pascal ähnlich ist. Ikone ist Pascal, mit der Syntax für Anweisungen, das Schlüsselwort und die ähnliche Syntax am ähnlichsten. Andererseits verwendet Ikone C-style Klammern, um Ausführungsgruppen zu strukturieren, und der Programm-Anfang durch das Laufen eines Verfahrens hat "wichtig" genannt.

Auf viele Weisen teilt Ikone auch Eigenschaften mit den meisten scripting Programmiersprachen (sowie SNOBOL und SL5, von dem sie genommen wurden): Variablen müssen nicht erklärt werden, Typen werden automatisch geworfen, und Zahlen können zu Schnuren und zurück automatisch umgewandelt werden. Eine andere Eigenschaft, die für viele scripting Sprachen, aber nicht alle üblich ist, ist der Mangel an einem linienbeendenden Charakter; in der Ikone werden durch einen Strichpunkt nicht beendete Linien durch einen implizierten Strichpunkt beendet, wenn sie Sinn hat.

Verfahren sind die grundlegenden Bausteine von Ikonenprogrammen, und obwohl sie das Namengeben von Pascal verwenden, arbeiten sie mehr wie C-Funktionen und können Werte zurückgeben; es gibt kein Schlüsselwort in der Ikone.

Verfahren doSomething (aString)

schreiben Sie (aString)

Ende </Code>

Absicht-geleitete Ausführung

Eines der Schlüsselkonzepte der Ikone ist, dass Kontrollstrukturen auf dem "Erfolg" oder "Misserfolg" von Ausdrücken, aber nicht auf der boolean Logik, als auf den meisten anderen Programmiersprachen basieren. Unter diesem Modell, einfachen Vergleichen wie

Das Dienstprogramm dieses Konzepts wird viel klarer, wenn Sie wirkliche Beispiele denken. Da Ikone Erfolg oder Misserfolg für die ganze Fluss-Kontrolle, diesen einfachen Code verwendet:

wenn a: = gelesen schreiben dann (a) </Code>

wird eine Linie des Standardeingangs zur Standardproduktion kopieren. Was über dieses Beispiel interessant ist, ist, dass der Code arbeiten wird, selbst wenn das gelesene einen Fehler zum Beispiel verursacht, wenn die Datei nicht besteht. In diesem Fall wird die Behauptung scheitern und schreiben wird einfach nicht genannt.

Auf

Erfolg und Misserfolg wird durch Funktionen verzichtet, bedeutend, dass ein Misserfolg innerhalb einer verschachtelten Funktion die Funktionen veranlassen wird, die es nennen, ebenso zu scheitern. Zum Beispiel können wir ein Programm schreiben, um eine komplette Eingangsdatei zur Produktion in einer einzelnen Linie zu kopieren:

während (gelesen ) </Code> schreiben

Wenn das gelesene Befehl am Ende der Datei zum Beispiel scheitert, wird auf den Misserfolg die Kette verzichtet und schreiben wird ebenso scheitern. Während, eine Kontrollstruktur seiend, der Halt auf dem Misserfolg, es bedeutend, anhält, wenn die Datei leer ist. Betrachten Sie zum Vergleich ein ähnliches Beispiel als geschrieben im javanischen Pseudocode:

versuchen Sie {\

während ((= gelesen )! = EOF) {\

schreiben Sie (a);

}\

} Fang (Ausnahme e) {\

//tun Sie nichts, herrschen Sie über die Schleife

} </Code>

In diesem Fall gibt es zwei Vergleiche erforderlich, ein für das Ende der Datei (EOF) und einen anderen für alle anderen Fehler. Da Java Fehlern nicht erlaubt, als Logikelemente verglichen zu werden, weil laut der Ikone die lange Syntax stattdessen verwendet werden muss. Versuchen Sie Blöcke auch erlegen eine Leistungsstrafe auf, um sie einfach zu verwenden, selbst wenn kein Fehler, verteilte Kosten vorkommt, die Ikone vermeidet.

Ikone kennzeichnet dieses Konzept als Absicht-geleitete Ausführung, sich auf die Weise beziehend, wie Ausführung weitergeht, bis eine Absicht erreicht wird. Im Beispiel über der Absicht soll die komplette Datei lesen; der gelesene Befehl setzt fort erfolgreich zu sein, während es mehr Information gibt, die zu lesen ist und scheitert, wenn es nicht gibt. Die Absicht wird so direkt auf der Sprache codiert, anstatt Behauptungen zu verwenden, die Rückcodes oder ähnliche Konstruktionen überprüfen.

Generatoren

Ausdrücke in der Ikone geben häufig einen einzelnen Wert, zum Beispiel, x zurück

1 | "hallo" | x

kann "1", "hallo", und "5" erzeugen, wenn x weniger als 5 ist. Wechselstromgeneratoren können als "oder" in vielen Fällen zum Beispiel gelesen werden:

wenn y

wird den Wert von y ausschreiben, wenn es kleiner ist als x oder 5. Innerlich überprüft Ikone jeden Wert vom linken bis direkt, bis man erfolgreich ist oder sich die Liste leert und es einen Misserfolg zurückgibt. Erinnern Sie sich, dass Funktionen nicht genannt werden, wenn die Anrufe innerhalb nicht scheitern, so kann dieses Beispiel verkürzt werden zu:

schreiben Sie ("y =", (x | 5)> y) </Code>

Ein anderer einfacher Generator ist, der Listen von ganzen Zahlen erzeugt; wird genau tun, wem es scheint. Die Schlag-Syntax erzeugt jeden Artikel einer Liste; wird Produktion jeder Charakter von aString auf einer neuen Linie.

Um die Macht dieses Konzepts zu demonstrieren, denken Sie Schnur-Operationen. Die meisten Sprachen schließen eine Funktion bekannt als ein, oder das gibt die Position einer Schnur innerhalb eines anderen zurück. Ziehen Sie in Betracht:

s = "Das ganze in der Welt eine Bühne. Und alle Männer und Frauen bloß Spieler";

i = indexOf (s) </Code>

Dieser Code wird 4, die Position des ersten Ereignisses des Wortes zurückkehren. Um das folgende Beispiel zu bekommen, muss eine abwechselnde Form, verwendet werden

i = indexOf (s, 5) </Code>

die 5 am Ende sagend sollte es von der Position 5 darauf schauen. Um alle Ereignisse herauszuziehen, muss eine Schleife verwendet werden...

s = "Das ganze in der Welt eine Bühne. Und alle Männer und Frauen bloß Spieler";

i = indexOf (s)

während ich! =-1 {\

schreiben Sie (i);

i = indexOf (s, i+1);

} </Code>

Laut der Ikone ist die finden Funktion ein Generator, und wird das folgende Beispiel der Schnur jedes Mal zurückgeben, wenn es vor dem Endmangel fortgesetzt wird, nachdem es das Ende der Schnur passiert. Derselbe Code laut der Ikone kann geschrieben werden:

s: = "Das ganze in der Welt eine Bühne. Und alle Männer und Frauen bloß Spieler"

jeder schreiben (finden (s)) </Code>

finden Sie wird den Index des folgenden Beispiels jedes Males zurückgeben, wenn es durch jeden fortgesetzt wird, schließlich das Ende der Schnur und des Mangels passierend. Als im vorherigen Beispiel wird das verursachen schreiben, um, und (Fach-) jede Schleife zu scheitern, um abzugehen.

Natürlich gibt es Zeiten, wo Sie absichtlich eine Schnur nach einem Punkt im Eingang zum Beispiel finden wollen, könnten Sie eine Textdatei scannen, die Daten in vielfachen Säulen enthält. Absicht-geleitete Ausführungsarbeiten hier ebenso, und können dieser Weg verwendet werden:

schreiben Sie (5

Die Position wird nur zurückgegeben, wenn "das" Erscheinen nach der Position 5, der Vergleich sonst scheitern wird, diesen Misserfolg passierend wie zuvor zu schreiben. Es gibt einen kleinen "Trick" zu diesem Code, der betrachtet werden muss: Vergleiche geben das Ergebnis der rechten Hand zurück, so ist es wichtig, das Finden auf der rechten Seite des Vergleichs zu stellen. Wenn die 5 rechts gelegt würden, 5 würde geschrieben.

Ikone fügt mehrere Kontrollstrukturen hinzu, um sich durch zu schlingen

Generatoren. Jeder Maschinenbediener ist während ähnlich, sich durch jeden Artikel schlingend, der durch einen Generator zurückgegeben ist und auf dem Misserfolg abgehend:

jeder k: = tue ich zu j

schreiben Sie (someFunction (k)) </Code>

Warum Gebrauch jeder statt einer Weile Schleife in diesem Fall?

Weil, während das erste Ergebnis, wiederbewertet

aber jeder erzeugt alle Ergebnisse.

Jede Syntax spritzt wirklich Werte in die Funktion nach einer Mode ein, die Blöcken unter dem Plausch ähnlich ist. Zum Beispiel kann die obengenannte Schleife dieser Weg umgeschrieben werden:

jeder (someFunction (ich zu j)) schreiben

</Code>

Benutzer können neue Generatoren leicht mit dem aufheben Schlüsselwort bauen:

Verfahren findOnlyOdd (Muster, theString)

jeder ich: = finden (Muster, theString) tun

wenn ich % 2 = 1 mich dann aufhebe

Ende </Code>

Dieses Beispiel Schleifen über das TheString-Verwenden findet, um nach Muster zu suchen. Wenn einer gefunden wird, und die Position seltsam ist, wird die Position von der Funktion damit zurückgegeben heben auf. Verschieden von der Rückkehr, heben Sie auf schreibt nieder, wo es in den inneren Generatoren ebenso ist, ihm erlaubend, sich zu erholen, wo es auf der folgenden Wiederholung aufgehört hat.

Schnuren

In Übereinstimmung mit seiner einer Schrift ähnlichen Funktionalität fügt Ikone mehrere Eigenschaften hinzu, um das Arbeiten mit Schnuren leichter zu machen. Am bemerkenswertesten unter diesen ist das Abtastungssystem, das wiederholt Funktionen auf einer Schnur nennt:

ist eine kurze Form der Beispiele gezeigt früher. In diesem Fall wird das Thema der Funktion außerhalb der Rahmen vor dem Fragezeichen gelegt. Ikonenfunktionen sind absichtlich (im Vergleich mit automatisch) geschrieben, um das Thema in Parameter-Listen zu identifizieren und ihnen zu erlauben, auf diese Mode herausgezogen zu werden.

Teilketten können aus einer Schnur durch das Verwenden einer Reihe-Spezifizierung innerhalb von Klammern herausgezogen werden. Eine Reihe-Spezifizierung kann einen Punkt in einen einzelnen Charakter oder eine Scheibe der Schnur zurückgeben. Schnuren können entweder vom Recht oder vom verlassenen mit einem Inhaltsverzeichnis versehen werden. Es ist wichtig zu bemerken, dass Positionen innerhalb einer Schnur zwischen dem Charakter-Abc sind und vom richtigen Abc angegeben werden können

Zum Beispiel

"Wikipedia" [1] ==> "W"

"Wikipedia" [3] ==> "k"

"Wikipedia" [0] ==> "ein"

"Wikipedia" [1:3] ==> "Wi"

"Wikipedia" [-2:0] ==> "ia"

"Wikipedia" [2 +:3] ==> "iki"

</Code>

Wo die letzten Beispiel-Shows mit einer Länge statt einer endenden Position

Die subscripting Spezifizierung kann als Lvalue innerhalb eines Ausdrucks verwendet werden. Das kann verwendet werden, um Schnuren in eine andere Schnur einzufügen oder Teile einer Schnur zu löschen. Zum Beispiel,

s: = "Alphabet"

s [2]: = "123"

s hat jetzt einen Wert von "a123c"

s: = "abcdefg"

s [3:5]: = "ABCD"

s hat jetzt einen Wert von "abABCDefg"

s: = "abcdefg"

s [3:5]: = ""

s hat jetzt einen Wert von "abefg"

</Code>

Andere Strukturen

Ikone erlaubt auch dem Benutzer, ihre eigenen Listen (oder Reihe) leicht zu bauen:

Die Sachen innerhalb einer Liste können von jeder Sorte einschließlich anderer Strukturen sein. Um größere Listen schnell zu bauen, schließt Ikone den Generator ein; erzeugt eine Liste, die 10 Kopien "des Wortes" enthält.

Wie Reihe auf anderen Sprachen erlaubt Ikone Sachen, durch die Position z.B nachgeschlagen zu werden.

Die Schlag-Syntax, wird z.B vier Linien, jeden mit einem Element ausdrucken.

Ikone schließt einem Stapel ähnliche Funktionen ein, und ihnen zu erlauben, die Basis von Stapeln und Warteschlangen zu bilden.

Ikone schließt auch Funktionalität für Sätze und Tische (bekannt als Kuddelmuddel, assoziative Reihe, Wörterbücher, usw.) ein:

Symbole: = Tabelle (0)

Symbole ["dort"]: = 1

Symbole ["hier"]: = 2 </Code>

Dieser Code schafft einen Tisch, der Null als der Verzug-Wert jedes unbekannten Schlüssels verwenden wird. Es fügt dann zwei Sachen darin mit den Schlüsseln "dort" und "hier" hinzu, und schätzt 1 und 2.

Schnur-Abtastung

Eine der starken Eigenschaften der Ikone ist Schnur-Abtastung. Der Ansehen-Schnur-Maschinenbediener, spart die aktuelle Schnur-Abtastungsumgebung und schafft eine neue Schnur-Abtastungsumgebung. Die Schnur-Abtastungsumgebung besteht aus zwei Schlüsselwort-Variablen, und. Wo &subject die Schnur ist, die wird scannt, und &pos der Cursor oder die aktuelle Position innerhalb der unterworfenen Schnur ist.

Zum Beispiel

s: = "ist das eine Schnur"

s? schreiben Sie ("Thema = [",&subject,"] pos = [",&pos,"]")

</Code>

würde erzeugen

unterwerfen Sie = [das ist eine Schnur] pos = [1]

</Code>

Eingebaute und benutzerbestimmte Funktionen können verwendet werden, um sich innerhalb der Schnur zu bewegen, die wird scannt. Viele der gebauten in Funktionen werden zu &subject und &pos (zum Beispiel die finden Funktion) im Verzug sein. Das folgende wird zum Beispiel schreiben, dass das ganze Formblatt "Wörter" in einer Schnur abgegrenzt hat.

s: = "ist das eine Schnur"

s? {# Gründen Schnur-Abtastungsumgebung

während nicht pos (0) {# Test für das Ende der Schnur tun

Etikett (viele ('')) # Hopser vorbei an irgendwelchen Formblättern

Wort: = Etikett (upto ('') | 0) # ist das folgende Wort bis zum folgenden Formblatt - oder das Ende der Linie

schreiben Sie (Wort) # schreiben das Wort

}\

}\</Code>

Ein mehr kompliziertes Beispiel demonstriert die Integration von Generatoren und Schnur-Abtastung innerhalb der Sprache.

Verfahren wichtig

s: = "Montag, der 8. Dez"

s? schreiben Sie (Mdate | "nicht ein gültiges Datum")

Ende

# Definieren eine zusammenpassende Funktion, die zurückgibt

# eine Schnur, die einen Tagesmonat dayofmonth vergleicht

Verfahren Mdate

# Definieren einige Anfangswerte

statische Daten

statische Tage

anfänglicher {\

Tage: = ["Montag", "Dienstag", "Wed", "Thr", "Freitag", "Gesessen", "Sonne"]

Daten: = ["Jan", "Febr", "Mrz", "Apr", "Mai", "Juni",

"Juli", "Aug", "Sep", "Okt", "November", "Dez"]

}\

jeder (retval aufheben

Das Idiom des Umsatzes der Wert des letzten Ausdrucks

Siehe auch

  • Unikonenprogrammiersprache (ein Nachkomme/Erhöhung der Ikone)

Die endgültige Arbeit ist Die Ikonenprogrammiersprache (die dritte Ausgabe) durch Griswold und Griswold, internationale Standardbuchnummer 1-57398-001-3.

Es ist vergriffen, aber kann in der PDF-Form heruntergeladen werden.

Ikone hat auch Co-Ausdrücke, nichtlokale Ausgänge für die Programm-Ausführung zur Verfügung stellend. Sieh bitte Die Ikonenprogrammiersprache und auch die Artikel-Co-Ausdrücke von Shamim Mohamed in der Ikone. (Dieses Thema sollte wahrscheinlich ausgebreitet werden).

Links


Ikone / Indianergemetzel
Impressum & Datenschutz