Miranda (Programmiersprache)

Miranda ist eine nichtstrenge rein funktionelle Programmiersprache, die von David Turner als ein Nachfolger seiner früheren Programmiersprachen SASL und KRC, mit einigen Konzepten von ML und Hope entworfen ist. Es wurde von Research Software Ltd. Englands erzeugt (der eine Handelsmarke auf dem Namen Miranda hält) und die erste rein funktionelle gewerblich zu unterstützende Sprache war.

Miranda wurde zuerst 1985, als ein schneller Dolmetscher in C für den Unix-Geschmack Betriebssysteme, mit nachfolgenden Ausgaben 1987 und 1989 befreit. Die spätere Programmiersprache von Haskell ist auf viele Weisen Miranda ähnlich.

Übersicht

Miranda ist eine faule, rein funktionelle Programmiersprache. D. h. es hat an Nebenwirkungen und befehlenden Programmiereigenschaften Mangel. Ein Programm von Miranda (hat eine Schrift genannt), ist eine Reihe von Gleichungen, die verschiedene mathematische Funktionen und algebraische Datentypen definieren. Der Wortsatz ist hier wichtig: Die Ordnung der Gleichungen ist im Allgemeinen, irrelevant, und es gibt kein Bedürfnis, eine Entität vor seinem Gebrauch zu definieren.

Da der Syntaxanalyse-Algorithmus intelligenten Gebrauch des Lay-Outs (Einrückung) macht, gibt es selten ein Bedürfnis danach, Behauptungen einzuklammern, und keine Behauptung sind terminators erforderlich. Diese Eigenschaft, die durch ISWIM begeistert ist, wird auch in occam und Haskell verwendet und wurde später von der Pythonschlange verbreitet.

Kommentar wird in regelmäßige Schriften durch die Charaktere eingeführt, und machen Sie zum Ende derselben Linie weiter. Eine Alternative kommentierend betrifft Tagung eine komplette Quellcodedatei, die als eine "des Lesens und Schreibens kundige Schrift" bekannt ist, in der jede Linie als eine Anmerkung betrachtet wird, wenn es mit einem Zeichen nicht anfängt.

Die grundlegenden Datentypen von Miranda sind, und. Eine Charakter-Schnur ist einfach eine Liste dessen, während zwischen zwei zu Grunde liegenden Formen still umgewandelt wird: Ganze Zahlen der willkürlichen Präzision (a.k.a. bignums) standardmäßig, und regelmäßiger Schwimmpunkt, schätzen wie erforderlich.

Tupel sind Folgen von Elementen potenziell Mischtypen, die Aufzeichnungen auf Pascal ähnlichen Sprachen analog sind, und werden abgegrenzt mit Parenthesen geschrieben:

this_employee = ("Folland, Mary", 10560, Falsch, 35)

</Quelle>

Die Liste ist stattdessen die meistens verwendete Datenstruktur in Miranda. Es wird abgegrenzt durch eckige Klammern und mit Komma-getrennten Elementen geschrieben, von denen alle desselben Typs sein müssen:

week_days = ["Montag", "Dienstag", "Wed", "Thur", "Freitag"]

</Quelle>

Listenverkettung ist, Subtraktion ist, Aufbau ist, nach Größen zu ordnen, ist, und das Indexieren, ist so:

Tage = week_days ++ ["Gesessen", "Sonne"]

Tage = "Null": Tage

Tage! 0

 "Null"

Tage = Tage - ["Null"]

#days

 7

</Quelle>

Es gibt mehrere Dateiaufbau-Abkürzungen: Wird für Listen verwendet, deren Elemente eine arithmetische Reihe mit der Möglichkeit bilden, für eine Zunahme außer 1 anzugeben:

fac n = Produkt [1.. n]

odd_sum = Summe [1,3.. 100]

</Quelle>

Allgemeinere und starke Dateiaufbau-Möglichkeiten werden durch "Listenverständnisse" zur Verfügung gestellt (vorher bekannt als "ZF Ausdrücke"), die in zwei Hauptformen kommen: Ein Ausdruck hat für eine Reihe von Begriffen z.B gegolten:

Quadrate = [n * n | n

(der gelesen wird: Die Liste von n hat übereingestimmt, wo n von der Liste aller positiven ganzen Zahlen genommen wird), und eine Reihe, wo jeder Begriff eine Funktion der vorherigen z.B ist:

powers_of_2 = [n | n

Da diese zwei Beispiele einbeziehen, berücksichtigt Miranda Listen mit einer unendlichen Zahl von Elementen, von denen das einfachste die Liste aller positiven ganzen Zahlen ist:

Die Notation für die Funktionsanwendung ist einfach Nebeneinanderstellung, als darin.

In Miranda, als auf den meisten anderen rein funktionellen Sprachen, sind Funktionen erstklassige Bürger, der sagen soll, dass sie als Rahmen zu anderen Funktionen passiert werden können, als Ergebnisse zurückgekehrt sind, oder als Elemente von Datenstrukturen eingeschlossen haben. Hinzu kommt noch, dass eine Funktion, die zwei oder mehr Rahmen verlangt, "teilweise parametrisiert", oder, durch die Versorgung von weniger mit Currysoße zubereitet werden kann als die volle Zahl von Rahmen. Das gibt eine andere Funktion, die, in Anbetracht der restlichen Rahmen, ein Ergebnis zurückgeben wird. Zum Beispiel:

fügen Sie einen b = + b hinzu

Zunahme = fügt 1 hinzu

</Quelle>

ist eine umständliche Weise, eine Funktion "Zunahme" zu schaffen, die denjenigen zu seinem Argument hinzufügt. In Wirklichkeit, nimmt die Zwei-Parameter-Funktion, wendet es auf das Erreichen einer Funktion des einzelnen Parameters an, die vier zu seinem Argument beiträgt, dann das darauf anwendet.

Jede Funktion, die zwei Rahmen nimmt, kann in einen Infix-Maschinenbediener (zum Beispiel verwandelt, die Definition der Funktion oben gegeben werden, der Begriff ist auf jede Weise, die dem Maschinenbediener gleichwertig ist), und jeder Infix-Maschinenbediener, der zwei Rahmen nimmt, kann in eine entsprechende Funktion verwandelt werden.

So:

erhöhen Sie = (+) 1

</Quelle>

ist die kürzeste Weise, eine Funktion zu schaffen, die denjenigen zu seinem Argument hinzufügt. Ähnlich in

Hälfte = (/2)

gegenseitig = (1/)

</Quelle>

zwei Funktionen des einzelnen Parameters werden erzeugt. Der Dolmetscher versteht in jedem Fall, der der zwei Rahmen des teilen Maschinenbedieners geliefert wird, Funktionen gebend, die beziehungsweise eine Zahl durch zwei teilen und sein Gegenstück zurückgeben.

Obwohl Miranda eine stark getippte Programmiersprache ist, beharrt sie auf ausführlichen Typ-Behauptungen nicht. Wenn ein Typ einer Funktion nicht ausführlich erklärt wird, leitet der Dolmetscher ihn aus dem Typ seiner Rahmen ab, und wie sie innerhalb der Funktion verwendet werden. Zusätzlich zu den grundlegenden Typen , schließt es "irgendetwas" Typ ein, wo der Typ eines Parameters, als in der listenumkehrenden Funktion nicht von Bedeutung ist:

Umdrehung [] = []

Umdrehung (a:x) = Umdrehung x ++ [ein]

</Quelle>

der auf eine Liste jedes Datentyps angewandt werden kann, für den die ausführliche Funktionstyp-Behauptung sein würde:

Umdrehung:: [*]-> [*]

</Quelle>

Schließlich hat es Mechanismen, um Programm-Module zu schaffen und zu führen, deren innere Funktionen für Programme unsichtbar sind, die jene Module nennen.

Beispielcode

Die folgende Schrift von Miranda bestimmt den Satz aller Teilmengen von einer Reihe von Zahlen

Teilmengen [] =

Teilmengen (x:xs) = y

und das ist eine des Lesens und Schreibens kundige Schrift für eine Funktion

der die Liste aller Primzahlen gibt

> || Die unendliche Liste aller Primzahlen, durch das Sieb von Eratosthenes.

Die Liste von potenziellen Primzahlen fängt als alle ganzen Zahlen von 2 vorwärts an;

als jede Blüte, alle folgenden Zahlen zurückgegeben wird, die genau sein können

geteilt dadurch werden aus der Liste von Kandidaten gefiltert.

> Blüte = Sieb [2..]

> Sieb (p:x) = p: Sieb [n | n

Links

Offizielle Website

Onslow County, North Carolina / Northampton County, North Carolina
Impressum & Datenschutz