Heim >Web-Frontend >js-Tutorial >Funktionale Programmierung in TypeScript

Funktionale Programmierung in TypeScript

Patricia Arquette
Patricia ArquetteOriginal
2024-10-19 22:32:29732Durchsuche

Functional Programming in TypeScript

Inhalt

  1. Einführung
  2. TypeScript-Umgebung
  3. Daten durch Funktionen darstellen
    1. Setzt
    2. Binäre Operationen
    3. Gehen Sie weiter
  4. Euklidische Ebene
    1. Eine Diskette zeichnen
    2. Zeichnen horizontaler und vertikaler Halbebenen
    3. Funktionen
    4. Gehen Sie weiter
  5. Fraktale
    1. Komplexe Zahlen und Zeichnen
    2. Mandelbrot-Fraktal
    3. Gehen Sie weiter

Quellcode finden Sie hier: https://github.com/aelassas/Functional-ts

Einführung

In TypeScript sind Funktionen nichts anderes als Objekte. Daher können Funktionen erstellt, als Parameter übergeben, von Funktionen zurückgegeben oder Variablen zugewiesen werden. Somit verfügt TypeScript über erstklassige Funktionen. Genauer gesagt unterstützt TypeScript Folgendes:

  • Funktionsargumente höherer Ordnung
  • Ergebnisse von Funktionen höherer Ordnung
  • Verschachtelte Funktionen
  • Anonyme Funktionen
  • Schließungen
  • Teilweise Anwendung (ECMAScript 5)

In diesem Artikel geht es nicht um die Grundlagen der funktionalen Programmierung, da Sie im Internet zahlreiche Ressourcen zu diesem Thema finden. Stattdessen geht es um funktionale Programmierung in TypeScript, angewendet auf Algebra, Zahlen, die euklidische Ebene und Fraktale. Die in diesem Artikel bereitgestellten Beispiele reichen von einfach bis komplexer, werden aber immer auf einfache, unkomplizierte und leicht verständliche Weise veranschaulicht.

TypeScript-Umgebung

Um den Quellcode auszuführen, müssen Sie Node.js installieren. Sobald Node.js installiert ist, laden Sie das Quellcode-Archiv herunter, entpacken Sie es, gehen Sie zu dem Quellcode-Ordner, den Sie auf einem Terminal entpackt haben, richten Sie die TypeScript-Umgebung ein und installieren Sie alle erforderlichen Abhängigkeiten mit dem folgenden Befehl:

npm install

Um die Numbers-Demo auszuführen, führen Sie den folgenden Befehl aus:

npm run numbers

Um die Demo des euklidischen Flugzeugs auszuführen, führen Sie den folgenden Befehl aus:

npm run plane

Um die Fractals-Demo auszuführen, führen Sie den folgenden Befehl aus:

npm run fractals

Daten durch Funktionen darstellen

Sei S eine beliebige Menge der Elemente a, b, c ... (zum Beispiel die Bücher auf dem Tisch oder die Punkte der euklidischen Ebene) und sei S' eine beliebige Teilmenge dieser Elemente (zum Beispiel die grüne Bücher auf dem Tisch oder die Punkte im Kreis mit Radius 1, der im Ursprung der euklidischen Ebene zentriert ist).

Die charakteristische Funktion S'(x) der Menge S' ist eine Funktion, die jedem Element x von S entweder wahr oder falsch zuordnet.

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Sei S die Menge der Bücher auf dem Tisch und sei S' die Menge der grünen Bücher auf dem Tisch. Seien a und b zwei grüne Bücher und seien c und d zwei rote Bücher auf dem Tisch. Dann:

npm install

Sei S die Menge der Punkte in der euklidischen Ebene und sei S' die Menge der Punkte im Kreis mit Radius 1, der im Ursprung der euklidischen Ebene (0, 0) (Einheitskreis) zentriert ist. Seien a und b zwei Punkte im Einheitskreis und seien c und d zwei Punkte in einem Kreis mit Radius 2, dessen Mittelpunkt im Ursprung der euklidischen Ebene liegt. Dann:

npm run numbers

Somit kann jede Menge S' immer durch ihre charakteristische Funktion dargestellt werden. Eine Funktion, die ein Element als Argument verwendet und true zurückgibt, wenn dieses Element in S' ist, andernfalls false. Mit anderen Worten, eine Menge (abstrakter Datentyp) kann durch eine Funktion in TypeScript dargestellt werden.

npm run plane

In den nächsten Abschnitten werden wir sehen, wie wir einige grundlegende Mengen in der Mengenalgebra durch TypeScript auf funktionale Weise darstellen können, und dann werden wir generische binäre Operationen für Mengen definieren. Wir werden diese Operationen dann auf Zahlen und dann auf Teilmengen der euklidischen Ebene anwenden. Mengen sind abstrakte Datenstrukturen, die Teilmengen von Zahlen und die Teilmengen der euklidischen Ebene sind die Darstellung abstrakter Datenstrukturen und schließlich sind die binären Operationen die generische Logik, die auf jede Darstellung der abstrakten Datenstrukturen funktioniert.

Sets

In diesem Abschnitt wird die Darstellung einiger grundlegender Mengen in der Mengenalgebra durch TypeScript vorgestellt.

Leeres Set

Functional Programming in TypeScript

Es sei E die leere Menge und leere ihre charakteristische Funktion. In der Mengenalgebra ist E die eindeutige Menge ohne Elemente. Daher kann Empty wie folgt definiert werden:

npm run fractals

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

In der Mengenalgebra wird Empty wie folgt dargestellt:

Functional Programming in TypeScript

Führen Sie also den folgenden Code aus:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Alles einstellen

Functional Programming in TypeScript

Sei S eine Menge und S' die Teilmenge von S, die alle Elemente und alle ihre charakteristischen Funktionen enthält. In der Mengenalgebra ist S' die vollständige Menge, die alle Elemente enthält. Daher kann „Alle“ wie folgt definiert werden:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Daher kann die Darstellung von S' in TypeScript wie folgt definiert werden:

type Set<T> = (x: T) => boolean

In der Mengenalgebra wird „All“ wie folgt dargestellt:

Functional Programming in TypeScript

Führen Sie also den folgenden Code aus:

npm install

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Singleton-Set

Es sei E die Singleton-Menge und Singleton seine charakteristische Funktion. In der Mengenalgebra ist E, auch Einheitsmenge oder 1-Tupel genannt, eine Menge mit genau einem Element e. Daher kann Singleton wie folgt definiert werden:

npm run numbers

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

npm run plane

Führen Sie also den folgenden Code aus:

npm run fractals

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Andere Sets

In diesem Abschnitt werden Teilmengen der Ganzzahlmenge vorgestellt.

Gerade Zahlen

Es sei E die Menge der geraden Zahlen und gerade ihre charakteristische Funktion. In der Mathematik ist eine gerade Zahl eine Zahl, die ein Vielfaches von zwei ist. Daher kann Even wie folgt definiert werden:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Führen Sie also den folgenden Code aus:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Ungerade Zahlen

Es sei E die Menge der ungeraden Zahlen und Odd ihre charakteristische Funktion. In der Mathematik ist eine ungerade Zahl eine Zahl, die kein Vielfaches von zwei ist. Daher kann Odd wie folgt definiert werden:

type Set<T> = (x: T) => boolean

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

Empty(x) = false if x is in E
Empty(x) = false if x is not in E

Führen Sie also den folgenden Code aus:

const empty = () => (e: T) => false

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Vielfache von 3

Es sei E die Menge der Vielfachen von 3 und MultipleOfThree seine charakteristische Funktion. In der Mathematik ist ein Vielfaches von 3 eine durch 3 teilbare Zahl. Daher kann MultipleOfThree wie folgt definiert werden:

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

All(x) = true if x is in S

Führen Sie also den folgenden Code aus:

const all = () => (e: T) => true

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Vielfache von 5

Es sei E die Menge der Vielfachen von 5 und MultipleOfFive seine charakteristische Funktion. In der Mathematik ist ein Vielfaches von 5 eine durch 5 teilbare Zahl. Daher kann MultipleOfFive wie folgt definiert werden:

npm install

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

npm run numbers

Führen Sie also den folgenden Code aus:

npm run plane

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Primzahlen

Vor langer Zeit, als ich mit Project Euler-Problemen herumspielte, musste ich Folgendes lösen:

npm run fractals

Um dieses Problem zu lösen, musste ich zunächst einen schnellen Algorithmus schreiben, der prüft, ob eine gegebene Zahl eine Primzahl ist oder nicht. Nachdem der Algorithmus geschrieben war, habe ich einen iterativen Algorithmus geschrieben, der Primzahlen durchläuft, bis die 10.001. Primzahl gefunden wurde.

Es sei E die Menge der Primzahlen und Prim ihre charakteristische Funktion. In der Mathematik ist eine Primzahl eine natürliche Zahl größer als 1, die außer 1 und sich selbst keine positiven Teiler hat. Daher kann Prime wie folgt definiert werden:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Daher kann die Darstellung von E in TypeScript wie folgt definiert werden:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Führen Sie daher den folgenden Code aus, um unser Problem zu lösen:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

wobei getPrime unten definiert ist:

type Set<T> = (x: T) => boolean

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Binäre Operationen

In diesem Abschnitt werden mehrere grundlegende Operationen zum Konstruieren neuer Mengen aus gegebenen Mengen und zum Manipulieren von Mengen vorgestellt. Unten das Ven-Diagramm in der Mengenalgebra.

Functional Programming in TypeScript

Union

Functional Programming in TypeScript

Es seien E und F zwei Mengen. Die Vereinigung von E und F, bezeichnet mit E U F, ist die Menge aller Elemente, die Mitglieder von E und F sind.

Lassen Sie Union die Union Operation sein. Somit kann die Union-Operation wie folgt in TypeScript implementiert werden:

Empty(x) = false if x is in E
Empty(x) = false if x is not in E

Führen Sie den folgenden Code aus:

const empty = () => (e: T) => false

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Überschneidung

Functional Programming in TypeScript

Es seien E und F zwei Mengen. Der Schnittpunkt von E und F, bezeichnet mit E n F, ist die Menge aller Elemente, die Mitglieder von E und F sind.

Intersection sei die Operation Intersection. Somit kann die Intersection-Operation wie folgt in TypeScript implementiert werden:

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))

Führen Sie den folgenden Code aus:

All(x) = true if x is in S

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Kartesisches Produkt

Functional Programming in TypeScript

Es seien E und F zwei Mengen. Das kartesische Produkt von E und F, bezeichnet mit E × F, ist die Menge aller geordneten Paare (e, f), so dass e ein Mitglied von E und f ein Mitglied von F ist.

CartesianProduct sei die Operation kartesisches Produkt. Somit kann die CartesianProduct-Operation wie folgt in TypeScript implementiert werden:

npm install

Führen Sie den folgenden Code aus:

npm run numbers

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Ergänzungen

Functional Programming in TypeScript

Es seien E und F zwei Mengen. Das Relativkomplement von F in E, bezeichnet mit E F, ist die Menge aller Elemente, die Mitglieder von E, aber nicht Mitglieder von F sind.

Komplement sei die relative Komplementoperation. Somit kann die Complement-Operation wie folgt in TypeScript implementiert werden:

npm run plane
Führen Sie den folgenden Code aus:
npm run fractals

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Symmetrischer Unterschied

Functional Programming in TypeScript

Es seien E und F zwei Mengen. Die symmetrische Differenz von E und F, bezeichnet mit E Δ F, ist die Menge aller Elemente, die Mitglieder von E und F sind, aber nicht im Schnittpunkt von E und F.

SymetrischeDifferenz sei die Operation symmetrische Differenz. Somit kann die SymmetricDifference-Operation in TypeScript auf zwei Arten implementiert werden. Eine triviale Möglichkeit besteht darin, die Vereinigungs- und Komplementoperationen wie folgt zu verwenden:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Eine andere Möglichkeit besteht darin, die XOR-Binäroperation wie folgt zu verwenden:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Führen Sie den folgenden Code aus:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

gibt die folgenden Ergebnisse:

Functional Programming in TypeScript

Andere Operationen

In diesem Abschnitt werden weitere nützliche binäre Operationen für Mengen vorgestellt.

Enthält

Contains sei die Operation, die prüft, ob ein Element in einer Menge enthalten ist oder nicht. Bei dieser Operation handelt es sich um eine Funktion, die ein Element als Parameter verwendet und „true“ zurückgibt, wenn das Element in der Menge enthalten ist, andernfalls „false“.

Daher ist dieser Vorgang in TypeScript wie folgt definiert:

type Set<T> = (x: T) => boolean

Führen Sie daher den folgenden Code aus:

npm install

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Hinzufügen

Add sei die Operation, die ein Element zu einer Menge hinzufügt. Bei dieser Operation handelt es sich um eine Funktion, die ein Element als Parameter nimmt und es der Menge hinzufügt.

Daher ist dieser Vorgang in TypeScript wie folgt definiert:

npm run numbers

Führen Sie daher den folgenden Code aus:

npm run plane

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Entfernen

Entfernen sei die Operation, die ein Element aus einer Menge entfernt. Bei dieser Operation handelt es sich um eine Funktion, die ein Element als Parameter annimmt und es aus der Menge entfernt.

Daher ist dieser Vorgang in TypeScript wie folgt definiert:

npm run fractals

Führen Sie daher den folgenden Code aus:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Für diejenigen, die weiter gehen wollen

Sie können sehen, wie einfach wir mit der Funktionalen Programmierung eine Mengenalgebra in TypeScript durchführen können. In den vorherigen Abschnitten wurden die grundlegendsten Definitionen gezeigt. Aber wenn Sie noch weiter gehen möchten, können Sie über Folgendes nachdenken:

  • Beziehungen über Mengen
  • Abstrakte Algebra, wie Monoide, Gruppen, Körper, Ringe, K-Vektorräume und so weiter
  • Inklusion-Ausschluss-Prinzip
  • Russells Paradoxon
  • Cantors Paradoxon
  • Dualer Vektorraum
  • Theoreme und Folgerungen

Euklidische Ebene

Im vorherigen Abschnitt wurden die grundlegenden Konzepte zu Mengen in TypeScript implementiert. In diesem Abschnitt üben wir die auf der euklidischen Ebene implementierten Konzepte.

Eine Scheibe zeichnen

Functional Programming in TypeScript

Eine Scheibe ist eine Teilmenge einer Ebene, die von einem Kreis begrenzt wird. Es gibt zwei Arten von Datenträgern. Geschlossene Scheiben, die Scheiben sind, die die Punkte des Kreises enthalten, der seine Grenze bildet, und Offene Scheiben, die Scheiben sind, die nicht die Punkte des Kreises enthalten, der seine Grenze bildet.

In diesem Abschnitt richten wir die Charakterfunktion der geschlossenen Festplatte ein und zeichnen sie in einer HTML5-Seite.

Um die Charakteristische Funktion einzurichten, benötigen wir zunächst eine Funktion, die den Euklidischen Abstand zwischen zwei Punkten in der Ebene berechnet. Diese Funktion wird wie folgt implementiert:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

wobei Punkt unten definiert ist:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Diese Formel basiert auf dem Satz des Pythagoras.

Functional Programming in TypeScript

wobei c der Euklidische Abstand ist, a² ist (p1.X - p2.X)² und b² ist (p1.Y - p2.Y)².

Die Festplatte sei die charakteristische Funktion einer geschlossenen Festplatte. In der Mengenalgebra lautet die Definition einer geschlossenen Scheibe in der reellen Menge wie folgt:

Functional Programming in TypeScript

wobei a und b die Koordinaten des Mittelpunkts und R der Radius sind.

Die Implementierung von Disk in TypeScript ist also wie folgt:

npm install

Um die Menge auf einer HTML5-Seite anzuzeigen, habe ich beschlossen, eine Funktion „Draw“ zu implementieren, die eine Menge in der Euklidischen Ebene zeichnet. Ich habe HTML5 gewählt und somit das Canvas-Element zum Zeichnen verwendet.

So habe ich die unten dargestellte Euklidische Ebene mithilfe der Methode „Zeichnen“ erstellt.

Functional Programming in TypeScript

Unten die Umsetzung des Flugzeugs.

npm run numbers

In der Zeichenfunktion wird eine Leinwand mit derselben Breite und derselben Höhe wie der Euklidische Ebene-Container erstellt. Dann wird jeder Punkt in Pixeln (x,y) der Leinwand durch einen schwarzen Punkt ersetzt, wenn er zur Menge gehört. xMin, xMax, yMin und yMax sind die in der Abbildung der Euklidischen Ebene oben dargestellten Grenzwerte.

Führen Sie den folgenden Code aus:

npm run plane

wobei disk die ID der Leinwand ist:

npm run fractals

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Zeichnen horizontaler und vertikaler Halbebenen

Functional Programming in TypeScript

Eine horizontale oder eine vertikale Halbebene ist eine der beiden Teilmengen, in die eine Ebene den euklidischen Raum unterteilt. Eine horizontale Halbebene ist eine der beiden Teilmengen, in die eine Ebene den euklidischen Raum durch eine Linie senkrecht zur Y-Achse teilt, wie in der Abbildung oben. Eine vertikale Halbebene ist eine der beiden Teilmengen, in die eine Ebene den euklidischen Raum durch eine Linie senkrecht zur X-Achse teilt.

In diesem Abschnitt werden wir die charakteristischen Funktionen der horizontalen und vertikalen Halbebenen einrichten, sie auf einer HTML5-Seite zeichnen und sehen, was passiert Wir können dies tun, wenn wir sie mit der Teilmenge disk kombinieren.

HorizontalHalfPlane sei die charakteristische Funktion einer horizontalen Halbebene. Die Implementierung von HorizontalHalfPlane in TypeScript ist wie folgt:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Führen Sie also den folgenden Code aus:

npm install

wobei hhp die ID der Leinwand ist:

npm run numbers

gibt das folgende Ergebnis:

Functional Programming in TypeScript

VerticalHalfPlane sei die charakteristische Funktion einer vertikalen Halbebene. Die Implementierung von VerticalHalfPlane in TypeScript ist wie folgt:

npm run plane
Führen Sie daher den folgenden Code aus:
npm run fractals

wobei vhd die ID der Leinwand ist:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Im ersten Abschnitt des Artikels richten wir grundlegende binäre Operationen für Mengen ein. Indem wir beispielsweise den Schnittpunkt einer Scheibe und einer Halbebene kombinieren, können wir die Teilmenge der Halbscheibe zeichnen.

Führen Sie daher das folgende Beispiel aus:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

wobei hd die ID der Leinwand ist:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Funktionen

In diesem Abschnitt werden Funktionen für die Mengen in der euklidischen Ebene vorgestellt.

Übersetzen

Functional Programming in TypeScript

TranslatePoint sei die Funktion, die einen Punkt in der Ebene übersetzt. In der euklidischen Geometrie ist TranslatePoint eine Funktion, die einen bestimmten Punkt um eine konstante Distanz in eine bestimmte Richtung verschiebt. Somit ist die Implementierung in TypeScript wie folgt:

type Set<T> = (x: T) => boolean

wobei (deltax, deltay) der konstante Vektor der Übersetzung ist.

Translate sei die Funktion, die eine Menge in der Ebene verschiebt. Diese Funktion wird einfach wie folgt in TypeScript implementiert:

Empty(x) = false if x is in E
Empty(x) = false if x is not in E
„translate“ verwendet als Parameter „deltax“, den Delta-Abstand in der ersten euklidischen Dimension, und „deltay“, den Delta-Abstand in der zweiten euklidischen Dimension. Wenn ein Punkt _P (x, y)_ in eine Menge _S_ verschoben wird, ändern sich seine Koordinaten zu _(x', y') = (x, delatx, y, deltay)_. Somit gehört der Punkt _(x' - delatx, y' - deltay)_ immer zur Menge _S_. In der Mengenalgebra wird „übersetzen“ isomorph genannt, mit anderen Worten, die Menge aller Übersetzungen bildet die _Übersetzungsgruppe T_, die isomorph zum Raum selbst ist. Dies erklärt die Hauptlogik der Funktion. Führen Sie daher den folgenden Code auf unserer HTML5-Seite aus:
const empty = () => (e: T) => false

wobei ep_op die ID der Leinwand ist:

console.log('\nEmpty set:')
console.log('Is 7 in {}?', common.empty()(7))

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Homothetie

Functional Programming in TypeScript

ScalePoint sei die Funktion, die jeden Punkt M an einen anderen Punkt N sendet, sodass das Segment SN auf derselben Linie wie SM liegt , jedoch skaliert um einen Faktor λ. In der Mengenalgebra wird Scale wie folgt formuliert:

Functional Programming in TypeScript

Die Implementierung in TypeScript ist also wie folgt:

npm install

wobei (deltax, deltay) der konstante Vektor der Übersetzung und (lambdax, lambday) der Lambda-Vektor ist.

Maßstab sei die Funktion, die eine Homothetie auf eine Menge im Plan anwendet. Diese Funktion wird einfach wie folgt in TypeScript implementiert:

npm run numbers

scale verwendet als Parameter deltax, das ist der Delta-Abstand in der ersten euklidischen Dimension, deltay, das ist der Delta-Abstand in der zweiten euklidischen Dimension, und (lambdax, lambday), der der konstante Faktorvektor λ ist. Wenn ein Punkt P (x, y) durch die Skala in einer Menge S transformiert wird, ändern sich seine Koordinaten zu (x', y') = (lambdax * x, delatx, lambday * y, deltay). Somit gehört der Punkt ((x'- delatx)/lambdax, (y' - deltay)/lambday) immer zur Menge S, wenn Lambda vom Vektor verschieden ist 0, natürlich. In der Mengenalgebra wird die Skala als Isomorph bezeichnet, mit anderen Worten: Die Menge aller Homotheten bildet die Homothetiegruppe H, die isomorph zum Raum selbst {0} ist. Dies erklärt die Hauptlogik der Funktion.

Führen Sie daher den folgenden Code auf unserer HTML5-Seite aus:

npm run plane

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Drehen

Functional Programming in TypeScript

RotatePoint sei die Funktion, die einen Punkt um einen Winkel θ dreht. In der Matrixalgebra wird rotatePoint wie folgt formuliert:

Functional Programming in TypeScript

wobei (x', y') die Koordinaten des Punktes nach der Drehung sind und die Formel für x' und y' lautet wie folgt:

Functional Programming in TypeScript

Die Demonstration dieser Formel ist sehr einfach. Schauen Sie sich diese Rotation an.

Functional Programming in TypeScript

Unterhalb der Demonstration:

Functional Programming in TypeScript

Die Implementierung in TypeScript ist also wie folgt:

npm install

Rotieren sei die Funktion, die eine Drehung auf eine Menge in der Ebene mit dem Winkel θ anwendet. Diese Funktion wird einfach wie folgt in TypeScript implementiert.

npm run numbers

rotate ist eine Funktion, die als Parameter Theta verwendet, also den Winkel der Drehung. Wenn ein Punkt P (x, y) durch Drehen in einer Menge S transformiert wird, ändern sich seine Koordinaten zu (x', y') = (x * cos(theta) - y * sin(theta), x * sin(theta), y * cos(theta)). Somit gehört der Punkt (x' * cos(theta), y' * sin(theta), y' * cos(theta) - x' * sin(theta)) immer zur Menge S. In der Algebra der Mengen wird Rotation als Isomorph bezeichnet, mit anderen Worten: Die Menge aller Rotationen bildet die Rotationsgruppe R, die isomorph zum Raum selbst ist. Dies erklärt die Hauptlogik der Funktion.

Führen Sie daher den folgenden Code auf unserer HTML5-Seite aus:

npm run plane

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Für diejenigen, die weiter gehen wollen

Sehr einfach, nicht wahr? Für diejenigen, die noch weiter gehen möchten, können Sie diese erkunden:

  • Ellipse
  • Dreidimensionaler euklidischer Raum
  • Ellipsoid
  • Paraboloid
  • Hyperboloid
  • Sphärische Harmonische
  • Superellipsoid
  • Haumea
  • Homöoid
  • Fokaloid

Fraktale

Functional Programming in TypeScript

Fraktale sind Mengen, die eine fraktale Dimension haben, die normalerweise ihre topologische Dimension überschreitet und zwischen den ganzen Zahlen liegen kann. Beispielsweise ist die Mandelbrotmenge ein Fraktal, das durch eine Familie komplexer quadratischer Polynome definiert ist:

npm run fractals

wobei c ein Komplex ist. Das Mandelbrot-Fraktal ist definiert als die Menge aller Punkte c, so dass die obige Sequenz nicht ins Unendliche entweicht. In der Mengenalgebra wird dies wie folgt formuliert:

Functional Programming in TypeScript

Fraktale (abstrakter Datentyp) können in TypeScript immer wie folgt dargestellt werden:

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

Komplexe Zahlen und Zeichnen

Um Fraktale zeichnen zu können, musste ich Komplexe Zahlen manipulieren. Daher habe ich die folgende Complex-Klasse erstellt:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

Mandelbrot-Fraktal

Ich habe ein Mandelbrot-Fraktal (abstrakte Datentypdarstellung) P(z) = z^2 c erstellt, das unten verfügbar ist.

npm install
Um _Complex_-Zahlen zeichnen zu können, habe ich eine `ComplexPlane`-Klasse erstellt. Nachfolgend finden Sie die Implementierung in TypeScript.
npm run numbers

Führen Sie also den folgenden Code aus:

npm run plane

wobei fractal die ID der Leinwand ist:

npm run fractals

gibt das folgende Ergebnis:

Functional Programming in TypeScript

Für diejenigen, die weiter gehen wollen

Für diejenigen, die noch weiter gehen möchten, können Sie diese erkunden:

  • Newton-Fraktale
  • Julia-Fraktale
  • Andere Fraktale

Das ist es! Ich hoffe, die Lektüre hat Ihnen gefallen.

Das obige ist der detaillierte Inhalt vonFunktionale Programmierung in TypeScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn