Hat funktionale Programmierung einen engen Bezug zur Mathematik?


20

Hat funktionale Programmierung so viel mit Mathematik zu tun, weil ein Großteil der funktionalen Programmierung mit mathematischen Begriffen dargestellt wird? Ist es ein MUSS, eine solide mathematische Basis zu haben, um funktionale Programmierung für einen Programmierer mit einem zwingenden Hintergrund zu lernen und zu verstehen?


1
Ist diese Frage richtig mit mathematica markiert oder sollte es Mathe sein?

Hier und hier sind zwei sehr ähnliche Fragen. Ich glaube nicht , Sie haben eine ‚starke Base‘ in Mathematik haben , aber Sie müssen ein ziemlich gutes Verständnis davon Prinzipien von einem gewissen Standpunkt aus. Geometrie hilft mir am meisten bei der Speicherzuordnung, aber ich denke selten mehr an die Zahlen als solche. Mathematik ist (kann) aber SEHR nützlich.
Garet Claborn

Antworten:


27

Alle Programmierungen beziehen sich auf Mathematik. Tatsächlich stellen viele Universitäten ihre Informatikprogramme immer noch unter die Zuständigkeit der mathematischen Fakultät.

Für das Erlernen der funktionalen Programmierung ist keine solide mathematische Basis erforderlich. Ich habe jetzt drei verschiedene funktionale Sprachen mit angemessenen Kenntnissen gelernt (Haskell, Erlang, Clojure) und meine eigenen mathematischen Fähigkeiten sind extrem schwach. Haskells Community kann in der Tat ein bisschen nervig werden, wenn es darum geht, mathematisch über Dinge zu sprechen, aber Erlang und Clojure sind beide sehr pragmatische funktionale Programmiersprachen, die nicht so schwer zu erlernen sind, da die Tutorial-Informationen scheinbar wie folgt geschrieben sind: Für Programmierer, nicht Hardcore-Mathematikfreaks. That being said, trotz meiner Behinderung in Mathe Ich habe Haskell abholen, so dass es nicht unmöglich ist.

Die eigentliche Schwierigkeit, die ich beim Erlernen deklarativer Programmiersprachen im Allgemeinen (von denen funktional eine Untergruppe ist) gefunden habe, besteht darin, den Drang aufzugeben, die Kontrolle zu behalten. um dem Computer zu sagen, was er tun soll. Es ist gewöhnungsbedürftig.


Schöne Worte, +1.
Mudassir

4
Wenn Sie SQL gut lernen, ist deklaratives Programmieren nicht so schwer.

7

Ja. Ein funktionales Programm besteht im Wesentlichen aus einer Reihe von Aussagen:

// 1_ und 2_ sind "Scheinargumente" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ etc ...

x = f ()

y = g (x)

z = h (x, h2 (y))

etc...

Sie schreiben, was das Programm tun soll, in Form von Gleichungen, die neue Werte (Anmerkung: keine Variablen) als Funktionen zuvor definierter Werte definieren. Sie definieren die Funktionen auch als Relationen. Es ist der Art und Weise, wie mathematische Theoreme geschrieben werden, sehr ähnlich.


Ich kann mathematische Funktionen besser verstehen als die seltsame Synatx von Haskell und anderen. Haben Sie einen Link, der mathematische Schritte mit der Syntax einer funktionalen Sprache in Verbindung bringt?
RainDoctor

Diese Antwort ist präzise. FP macht erst dann Sinn, wenn Sie erkennen (und verinnerlichen), dass Sie mathematische Funktionen und keine schrittweisen Prozeduren schreiben. Die meisten Leute lernen zuerst die Prozedurprogrammierung und das Gepäck ist riesig. Ich denke, "Funktionen" in prozeduralen Sprachen sollten als "Prozeduren" bezeichnet werden.
Kakaji

2

IMO Mathematica als Beispiel für eine Sprache, in der Sie funktionale Programmierung verwenden können, erfordert keine ausgeprägten mathematischen Kenntnisse. Tatsächlich glaube ich, dass ich während meiner Grundausbildung in Mathematik auf nichts Vergleichbares gestoßen bin. Ich habe mit der Mathematica-Programmierung im C-Stil begonnen und erst Jahre später die funktionale Programmierung entdeckt. Ich glaube nicht , die grundlegenden funktionalen Programmierkonstrukte wie Map, Apply, NestListusw. erfordern alle mathematischen Hintergrund überhaupt.


1

nicht wirklich. funktionale programmierung ist nur eine methodik, hat aber ihre basis in lambda und so.

Closures sind ein (kleiner) Versuch, funktionale Programmierkonzepte in prozedurale Sprachen einzuführen. stattdessen for(int i =0 ; i < num; i++) doStuff(arr[i]);können Sie stattdessen davon ausgehen, dass die Elemente des Arrays von Natur aus "Sachen gemacht" haben könnenarr.each do |el| doStuff(el) end


10
Sie veranschaulichen nur eine anonyme Funktion, nicht die Schließung. Wikiedpia:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

Die kurze Antwort lautet: Ja, denn alles, was einen gewissen Grad an Formalisierung aufweist (wie z. B. Programmiersprachen), ist stark mit der Mathematik verbunden, und zwar für unterschiedliche Grade der Mathematik.

Die Verwendung einer Programmiersprache setzt jedoch nicht unbedingt die Kenntnis der Mathematik voraus, beispielsweise der theoretischen Grundlagen von Sprachen. Sie müssen nicht wissen, was eine kontextfreie Sprache ist und welche Gesetze und Eigenschaften eine solche Sprache hat, um eine zu verwenden. Ebenso muss man kein Germanist oder Romanist sein, um Deutsch oder Französisch zu sprechen.

Die "mathematische" Notation ist keine gemeinsame Eigenschaft von funktionalen Sprachen. Scala und alle Lisp-basierten Sprachen haben im Vergleich zu Haskell sehr unterschiedliche Syntaxen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.