Unlambda

Unlambda ist ein minimaler, "fast reine" funktionelle von David Madore erfundene Programmiersprache. Es basiert auf der combinatory Logik, einer Version der Lambda-Rechnung, die den Lambda-Maschinenbediener weglässt. Es verlässt sich hauptsächlich auf zwei eingebaute Funktionen (s und k) und ein "anwenden" Maschinenbediener (schriftlich`, der backquote Charakter). Diese allein lassen es Turing-vollenden, aber es gibt auch einige Eingabe/Ausgabe-Funktionen, es möglich zu machen, mit dem Benutzer, einigen Abkürzungsfunktionen und einer Funktion für die faule Einschätzung aufeinander zu wirken. Es gibt keine Variablen auf der Sprache.

Kernprinzipien

Als eine esoterische Programmiersprache wird Unlambda als eine Demonstration der sehr reinen funktionellen Programmierung aber nicht für den praktischen Gebrauch gemeint. Seine Haupteigenschaft ist der Mangel an herkömmlichen Maschinenbedienern und Datentypen - die einzige Art von Daten im Programm ist Ein-Parameter-Funktionen. Daten können dennoch mit passenden Funktionen als in der Lambda-Rechnung vorgetäuscht werden. Mehrparameter-Funktionen können mit der Technik davon vertreten werden, mit Currysoße zuzubereiten.

Unlambda basiert um den Grundsatz der Abstraktionsbeseitigung oder der Beseitigung aller gesparten Variablen einschließlich Funktionen. Als eine rein funktionelle Sprache, sind nicht nur die Funktionen des Unlambdas erster Klasse protestiert, sie sind die einzigen erstklassigen Gegenstände.

Eine Durchführung des hallo Weltprogramms im Unlambda folgt:

`r```````````.H.e.l.l.o..w.o.r.l.di

Ursprüngliche eingebaute Funktionen

Die Notation zeigt eine Funktion an, die ein Argument nimmt und es unverändert zurückgibt, den einzelnen Charakter x als eine Nebenwirkung druckend, wenn es angerufen wird. vertritt die Version der Identitätsfunktion, die keine solche Nebenwirkung hat; es wird hier als ein Scheinargument verwendet. Das Programm gilt - Funktion zu einem Scheinargument druckend, zurückkehrend und den Brief als eine Nebenwirkung druckend. Ähnlich zuerst gilt für, den Brief und das Zurückbringen druckend; dieses Ergebnis dessen wird dann auf als im vorherigen Beispiel angewandt. Die Funktion ist syntaktischer Zucker für die Funktion, die ein Zeilenvorschubzeichen druckt.

Andere wichtige durch das Unlambda zur Verfügung gestellte Eigenschaften schließen und Funktionen ein. Fertigungen unveränderliche Funktionen: Das Ergebnis dessen ist eine Funktion, die, wenn angerufen, x zurückgibt. So ist der Wert dessen x für jeden x und y.

ist ein verallgemeinerter Einschätzungsmaschinenbediener. bewertet zu für jeden x, y, und z. Es ist eine bemerkenswerte Tatsache, dass und genügend sind, jede Berechnung, wie beschrieben, im SKI combinator Rechnung durchzuführen. Als ein kurzes Beispiel, bemerken Sie, dass die Identitätsfunktion als, seit Erträgen x für den ganzen x durchgeführt werden kann.

Ein Fluss-Kontrollaufbau des Unlambdas ist Anruf mit der aktuellen Verlängerung, angezeigt. Wenn ein Ausdruck der Form bewertet wird, wird ein spezieller "Verlängerungs"-Gegenstand gebaut, den Staat des Dolmetschers in diesem Moment vertretend. Dann wird x bewertet, und dann wird das Ergebnis der Verlängerungsgegenstand als ein Argument gegeben. Wenn die Verlängerung auf ein Argument nie angewandt wird, ist der Wert des Ausdrucks dasselbe als der Wert von x. Aber wenn der Verlängerungsgegenstand auf einen Wert y angewandt wird, wird die Ausführung von x sofort abgebrochen, und der Wert des kompletten Ausdrucks ist y.

Obwohl die Ausführungssemantik des Unlambdas normalerweise eifrig ist, gibt es eine faule Einschätzungsauswahl, die durch den Gebrauch des Maschinenbedieners angezeigt ist. Gewöhnlich, um einen Ausdruck der Form zu bewerten, bewertet Unlambda zuerst x, dann y, und wendet dann x auf y an. Jedoch, wenn x zum speziellen Wert bewertet, dann wird y nicht bewertet; statt dessen ist der Wert des Ausdrucks eine spezielle "verzögerte Berechnung" Gegenstand, der, wenn angewandt, auf ein Argument z, y bewertet, und dann seinen Wert auf z anwendet. Bemerken Sie, dass ohne Nebenwirkungen das genau dasselbe als ist. Der Unterschied ist das führt irgendwelche Nebenwirkungen in y sofort durch, wohingegen die Nebenwirkungen aufschiebt, bis das Ergebnis auf ein anderes Argument angewandt wird.

Der folgende eingebaute Maschinenbediener des Unlambdas ist, der sein Argument und Umsatz ignoriert. Diese Eigenschaft ist nicht ausschließlich notwendig, seitdem konnte als durchgeführt werden, aber sie wird als eine Bequemlichkeit geliefert. (Dieser Ausdruck ist oben einfach, wo einen festen Punkt combinator anzeigt.)

Unlambda 2 eingebaute Funktionen

Zusätzlich gebaut-ins wurden in der Version 2 der Unlambda-Sprache eingeführt. Der Eingang im Unlambda wird von Maschinenbedienern erleichtert und. Wenn auf eine Funktion x angewandt wird, wird ein Charakter vom Eingang gelesen, und als der "aktuelle Charakter" versorgt; dann wird x darauf angewandt. Jedoch, wenn keine Charaktere mehr auf dem Eingang verfügbar waren, wird der "aktuelle Charakter" unbestimmt verlassen, und x wird auf stattdessen angewandt. Wenn eine Funktion auf eine Funktion x angewandt wird, ist das Ergebnis die Einschätzung dessen, wenn der aktuelle Charakter u ist, sonst wird bewertet.

Es gibt auch einen "Nachdruck"-Maschinenbediener. Wenn bewertet wird, wird die Funktion x darauf angewandt, wenn u der aktuelle Charakter ist, oder zu wenn es keinen aktuellen Charakter gibt.

Schließlich gibt es einen Ausgangsmaschinenbediener. Wenn auf x angewandt wird, wird die Ausführung des Programms begrenzt, und x wird als das Ergebnis des Programms genommen (die meisten zurzeit vorhandenen Dolmetscher ignorieren das Ergebnis irgendwie).

Siehe auch

Ähnliche Sprachen:

Rechenbetontes System, auf dem Unlambda basiert:

Links


Kampf von Wittstock / Bristol Pegasus
Impressum & Datenschutz