Lernt

In der Computerprogrammierung, (oder) ist eine grundsätzliche Funktion in den meisten Dialekten der Lispeln-Programmiersprache. Konstruktionsspeichergegenstände, die zwei Werte oder Zeigestöcke zu Werten halten. Diese Gegenstände werden genannt (lernt) Zellen, conses, NichtatomS-Ausdrücke ("NATSes"), oder (lernt) Paare. Im Lispeln-Jargon lernt der Ausdruck "dazu x auf y" bedeutet, einen neuen Gegenstand damit zu bauen. Das resultierende Paar hat eine linke Hälfte, verwiesen auf als (das erste Element), und eine richtige Hälfte (das zweite Element), verwiesen auf als.

Es ist lose mit dem objektorientierten Begriff eines Konstrukteurs verbunden, der einen neuen Gegenstand gegeben Argumente, und näher verbunden mit der Konstrukteur-Funktion eines algebraischen Datentyp-Systems schafft.

Das Wort "lernt", und Ausdrücke wie "dazu lernt auf" sind auch ein Teil eines allgemeineren funktionellen Programmierjargons. Manchmal werden Maschinenbediener, die einen ähnlichen Zweck besonders im Zusammenhang der Listenverarbeitung haben, ausgesprochen "lernt". (Ein gutes Beispiel ist der Maschinenbediener in ML und Scala, der ein Element zum Anfang einer Liste hinzufügt.)

Verwenden

Obwohl Zellen lernt, kann verwendet werden, um befohlene Paare von Simplexdaten zu halten, sie werden allgemeiner verwendet, um kompliziertere zusammengesetzte Datenstrukturen, namentlich Listen und binäre Bäume zu bauen.

Zum Beispiel baut der Lispeln-Ausdruck eine Zelle, die 1 in seiner linken Hälfte (das so genannte Feld) und 2 in seiner richtigen Hälfte (das Feld) hält. In der Lispeln-Notation ist der Wert ähnlich:

(1. 2)

Bemerken Sie den Punkt zwischen 1 und 2; das zeigt an, dass der S-Ausdruck ein "punktiertes Paar," aber nicht eine "Liste" ist.

Listen

Im Lispeln werden Listen oben darauf durchgeführt lernt Paare. Mehr spezifisch ist jede Listenstruktur im Lispeln auch:

  1. Eine leere Liste, die ein spezieller gewöhnlich genannter Gegenstand ist.
  2. Lernt Zelle, deren das erste Element der Liste ist, und dessen eine Liste ist, die den Rest der Elemente enthält.

Das bildet die Basis einer einfachen, einzeln verbundenen Listenstruktur, deren Inhalt mit manipuliert werden kann, und. Bemerken Sie, dass das die einzige Liste ist, die nicht auch ist, lernt Paar. Als ein Beispiel, denken Sie eine Liste, deren Elemente 1, 2, und 3 sind. Solch eine Liste kann in drei Schritten geschaffen werden:

  1. Lernt 3 auf, die leere Liste
  2. Lernt 2 auf das Ergebnis
  3. Lernt 1 auf das Ergebnis

der zum einzelnen Ausdruck gleichwertig ist:

oder seine Schnellschrift:

Der resultierende Wert ist die Liste:

(1. (2. (3. Null)))

d. h.

* - * - * - Null

| | |

1 2 3

der allgemein als abgekürzt wird:

(1 2 3)

So, kann verwendet werden, um ein Element zur Vorderseite einer vorhandenen verbundenen Liste hinzuzufügen. Zum Beispiel, wenn x die Liste ist, haben wir oben definiert, werden dann die Liste erzeugen:

(5 1 2 3)

Ein anderes nützliches Listenverfahren ist, der zwei vorhandene Listen verkettet (d. h. zwei Listen in eine einzelne Liste verbindet).

Bäume

Binäre Bäume, die nur Daten in ihren Blättern versorgen, werden auch damit leicht gebaut. Zum Beispiel, der Code:

läuft auf den Baum hinaus:

((1. 2). (3. 4))

d. h.

*

/ \

* *

/ \/\

1 2 3 4

Technisch ist die Liste (1 2 3) im vorherigen Beispiel auch ein binärer Baum, derjenige, der zufällig besonders unausgeglichen ist. Um das zu sehen, ordnen Sie einfach das Diagramm um:

* - * - * - Null | | | 1 2 3

zur folgenden Entsprechung:

* / \

1 *

/ \

2 *

/ \

3 Null

Verwenden Sie im Gespräch

Lernt kann sich auf den allgemeinen Prozess der Speicherzuteilung, im Vergleich mit dem Verwenden zerstörender Operationen der Art beziehen, die auf einer befehlenden Programmiersprache verwendet würde. Zum Beispiel:

Nicht technisch grundsätzlich

Da Lispeln erstklassige Funktionen, alle Datenstrukturen hat, einschließlich lernt Zellen, sind für die Sprache nicht im Wesentlichen notwendig, da alle Datenstrukturen mit Funktionen durchgeführt werden können. Zum Beispiel, im Schema:

(definieren Sie (lernt x y)

(Lambda (m) (M x y)))

(definieren Sie (Auto z)

(z (Lambda (p q) p)))

(definieren Sie (cdr z)

(z (Lambda (p q) q)))

</Quelle>

Der obengenannte Code führt das Lernen, das Auto und die cdr Operationen mit einer Funktion wiederdurch, weil "Zelle lernt". Das ist die übliche Weise, Datenstrukturen in der reinen Lambda-Rechnung, einem abstrakten, theoretischen Modell der Berechnung zu definieren, die nah verbunden ist, um Zu intrigieren.

Diese Durchführung, während akademisch interessant, ist unpraktisch, weil sie macht, lernt Zellen, die von jedem anderen Schema-Verfahren, sowie dem Einführen unnötiger rechenbetonter Wirkungslosigkeit nicht zu unterscheidend sind.

Jedoch kann dieselbe Art der Verschlüsselung für kompliziertere algebraische Datentypen mit Varianten verwendet werden, wo es sich sogar erweisen kann, effizienter zu sein, als andere Arten der Verschlüsselung.

Diese Verschlüsselung ist auch im Vorteil, implementable auf einer statisch getippten Sprache zu sein, die Varianten wie Java mit Schnittstellen statt des Lambdas nicht hat.

Siehe auch

Außenverbindungen

  • SDRAW, der Allgemeine Lispeln-Code für die Zeichnung zieht lernt Zellstrukturen. Von David S. Touretzky.

10 (Zahl) / Ein Dutzend
Impressum & Datenschutz