Heim > Backend-Entwicklung > Golang > Apropos funktionale Programmierung aus der Sprachschließung von Go

Apropos funktionale Programmierung aus der Sprachschließung von Go

Freigeben: 2020-01-07 17:44:41
nach vorne
2758 Leute haben es durchsucht

Apropos funktionale Programmierung aus der Sprachschließung von Go

Dieser Artikel lernt funktionale Programmierung unter folgenden Aspekten:

1. Welche Beziehung besteht zwischen mathematischen Formeln und funktionaler Programmierung

Um ein einfaches Beispiel zu nennen: In der Mathematik gibt es ein Konzept namens Mapping (y=f(x)). Vereinfacht ausgedrückt ist es eine Funktion. Die bekannteste dürfte die quadratische Funktion sein (Parabel y=a*x*x+b*x+c)

Jetzt implementiert die Codierung den Wert eines bestimmten Punktes auf der Parabel. Wir wissen, dass a, b , c sind Parameter, x ist die unabhängige Variable und y ist die abhängige Variable. Wenn es vorher so wäre, könnte ich es so implementieren (um an das C++ zu erinnern, das ich schon lange nicht mehr geschrieben habe, werde ich es schreiben c++)

double getParabola(double a,double b,double c,double x) {
     return a*x*x+b*x+c;
}
Nach dem Login kopieren

Frage 1. Finden Sie bei einer gegebenen Parabel den Wert, wenn x=2, x=3, x=4. Dies ist die folgende Methode

resultA = getParabola(a,b,c,2)
resultB = getParabola(a,b,c,2)
resultC = getParabola(a,b,c,2)
Nach dem Login kopieren

Dies ist eine normale Methode in der Programm. Gibt es jedoch aus mathematischer Sicht eine Möglichkeit, mit dem mathematischen Formeldenken in Einklang zu kommen? Das Folgende ist eine weitere Implementierung von mir (hier mit go implementiert, weil ich weiß, wie man in C++ schreibt):

func getParabola(aa,bb,cc float32){
    var a = aa
    var b = bb
    var c = cc
 
    a := func(x float32) {
           return a*x*x+b*x+c
    }
 
    return a
}
Nach dem Login kopieren

Dann lautet die Lösung auch für Frage 1 wie folgt

parabola := getParabola(a,b,c)
 
resultA := parabola(2)
resultB := parabola(3)
resultC := parabola(4)
Nach dem Login kopieren

Ist es nicht dasselbe, als würde man den Wert einer Funktion ermitteln? Daher werden mathematische Beziehungen in der funktionalen Programmierung gut dargestellt.

2. Was sind die Merkmale der funktionalen Programmierung und welche Konzepte werden von Go unterstützt?

Die funktionale Programmierung weist drei Hauptmerkmale auf

1. Unveränderlichkeit von Variablen: Sobald einer Variablen ein Wert zugewiesen wurde, kann dieser nicht mehr geändert werden. Wenn Änderungen erforderlich sind, müssen diese kopiert und dann geändert werden. Sobald einer String-Variablen in Go ein Wert zugewiesen wurde, kann sie nicht wie in C++ wie c[2]='a' geändert werden. Stattdessen muss sie explizit in []Byte konvertiert und dann geändert werden. Aber es ist bereits ein weiteres Stück Erinnerung.

2. Funktionale erstklassige Bürger: Funktionen sind ebenfalls Variablen und können im Programm als Parameter, Rückgabewerte usw. übergeben werden. Diese Funktion sollte sowohl von C++ als auch von Go unterstützt werden.

3. Schwanzrekursion: Das Konzept der Rekursion wurde in der Fibonacci-Folge gelernt. Wenn die Rekursion sehr tief ist, kann der Stapel explodieren und zu erheblichen Leistungseinbußen führen. Was die Endrekursionsoptimierungstechnologie betrifft, kann der Stapel bei jeder Rekursion wiederverwendet werden, wenn der Compiler sie unterstützt (Endrekursion bedeutet, dass der rekursive Aufruf im letzten Schritt erfolgt. Zu diesem Zeitpunkt werden die vorherigen Ergebnisse als Parameter an den letzten Schritt übergeben des Aufrufs, daher hat der vorherige Zustand keine Auswirkung mehr, sodass der Stapel wiederverwendet werden kann.

Gemeinsame Techniken in der funktionalen Programmierung

1. Map&Reduce&Filter

Map wird verwendet, um für jede Eingabe dieselbe Funktion aufzurufen, um eine Ausgabe zu erzeugen, z for_each in C++, Map in Hadoop, Map in Python usw.

Reduzieren wird verwendet, um jede Eingabe zur vorherigen Ausgabe hinzuzufügen, um die nächste Ausgabe zu erhalten, z. B. Reduzieren in Python und Hadoop.

Filter wird zum Filtern verwendet, z. B. count_if von C++ usw. .

2. Rekursion

3. Pipeline

Fügen Sie die Funktionsinstanz in ein Array oder eine Liste ein und übergeben Sie die Daten dann an die Aktionsliste, und die Eingabe wird sequentiell übergeben zu jedem Die Funktion wird ausgeführt (was bedeutet, dass die Ausgabe jeder Funktion als Eingabe einer anderen Funktion verwendet wird, die Daten fließen und die Berechnung festgelegt ist, ähnlich dem Konzept des Sturms), und schließlich erhalten wir das gewünschte Ergebnis.

4. Andere (noch zu untersuchen)

3. Funktionale Programmierung und Betriebseffizienz

Das wichtigste Konzept der funktionalen Programmierung sind Funktionsgleichungen sind Bürger erster Klasse, Funktionen und Variablen sind gleich. Kann als Parameter, Rückgabewert usw. verwendet werden. Die Verwendung von Zuweisungsanweisungen wird nicht bevorzugt, daher wird die Rekursion häufiger verwendet, sodass die Effizienz der funktionalen Programmierung definitiv geringer ist.

Was ich in letzter Zeit verwende, ist das Konzept des Abschlusses. Jedes Mal, wenn der Abschlussausdruck ausgewertet wird, unterscheidet sich das Ergebnis von einem Eine gewöhnliche Funktion ist ein ausführbarer Code. Solange der Eingang bestimmt ist, wird auch die aufrufende Position bestimmt. Im obigen Parabelbeispiel führt der Aufruf von

a:=getParabola(0.2,0.1,0.3)
b:=getParabola(0.1,0.1,0.4)
Nach dem Login kopieren

beispielsweise zu zwei Parabeln. Der Grund, warum ich denke, dass die Effizienz verringert wird, liegt darin, dass der Abschluss selbst ein Prozess der Bewertung und Zuweisung ist, der die Erstellung und Zerstörung von Variablen beinhaltet. Natürlich habe ich die Leistung nicht wirklich getestet. Wenn die Effizienz nachfolgender Release-Server abnimmt, ist dies möglicherweise eine Überlegung wert.

Weitere Go-Sprachkenntnisse finden Sie in der Spalte Go-Sprach-Tutorial auf der chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonApropos funktionale Programmierung aus der Sprachschließung von Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
go
Quelle:cnblogs.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage