Frage

Ich bin ein Universitätsstudent und wir studieren derzeit Lambda Calcül. Es fällt mir jedoch immer noch schwer zu verstehen, warum dies für mich nützlich ist. Mir ist klar, dass es nützlich sein könnte, wenn Sie eine Menge funktioneller Programmierung durchführen, aber ich denke, dass es nicht wirklich benötigt wird, um funktionelle Programme zu lernen, was denkst du?

Zweitens gibt es im Bereich der Informatik einen Einsatz für Lambda -Kalkül, außer außerhalb der funktionalen Programmiersprachen?

War es hilfreich?

Lösung

Der Lambda -Kalkül ist von grundlegender Bedeutung für Logik, Kategoriestheorie, Typtheorie, formale Überprüfung, ... im Grunde genommen alles, was mit Programmiersprache Semantik und formaler Logik zu tun hat. Es ist ein so grundlegender Formalismus, dass Menschen, die in diesen Bereichen arbeiten, nicht einmal den Vorteil davon in Frage stellen.

Ich denke, dass es äußerst nützlich ist, um die funktionale Programmierung zu verstehen, da es Ihnen die Essenz der funktionalen Programmierung gibt. Funktionen, Anwendung, Substitution. Basierend darauf können Sie Ihre Fähigkeiten im Denken zu Funktionsprogrammen und Transformationen von ihnen aufbauen. Funktionen höherer Ordnung sind ein Kinderspiel.

Sicher könnten Sie funktionale Programmierung ohne den Lambda -Kalkül lernen, aber Sie würden die funktionale Programmierung ohne sie niemals wirklich verstehen.

Andere Tipps

Sie bitten um eine Anwendung außerhalb von Informatik und Logik. Dies ist leicht zu finden, beispielsweise in der algebraischen Topologie ist es zweckmäßig, eine kartesische geschlossene Kategorie von Räumen zu haben, siehe bequeme Kategorie topologischer Räume auf nlab. Die formale Sprache, die kartesische Kategorien entspricht, ist genau die $ lambda $ -Calculus. Lassen Sie mich ein sehr einfaches Beispiel veranschaulichen, wie dies nützlich ist.

Angenommen, jemand fragt Sie, ob die Funktion $ f: mathbb {r} bis mathbb {r} $ definiert durch $ f (x) = x^2 e^x + log (1 + definiert ist x^2) $ ist differenzierbar. Sie müssen eigentlich nicht beweisen, dass dies der Fall ist. Sie beobachten nur, dass es sich um eine Zusammensetzung differenzierbarer Funktionen handelt und daher differenzierbar. Mit anderen Worten, Sie haben eine leichte Schlussfolgerung auf der Grundlage des bilden der Definition.

Nun zum wirklichen Beispiel. Nehmen wir an, jemand fragt Sie, ob die Funktion $ f: mathbb {r} to mathbb {r} $ definiert durch $$ f (x) = links ( lambda f: mathcal {c} ( mathbb {r} definiert wurde ). int _ {-x}^{x} f (1 + t^2) dt rechts) ( lambda y: mathbb {r}. max (x, sin (y + 3)) $$ ist kontinuierlich. Auch hier können wir sofort "Ja" antworten, da die Funktion mit dem $ lambda $ -Calculus definiert wird und von kontinuierlichen Karten $ max $, $ int $, $ sin $ usw. beginnt.

Verschiedene Erweiterungen des $ lambda $ -Calculus ermöglichen es, in anderen Bereichen dasselbe zu tun. Zum Beispiel, weil a glatte Topos Ist eine kartesische geschlossene Kategorie, jede Karte, die mit dem $ lambda $ -Calculus definiert wird, beginnend von Derivaten und der Ringstruktur der Realität (und Sie können die Exponentialfunktion, wenn Sie möchten, einwerfen), ist automatisch reibungslos. (Tatsächlich ist der Hauptschub des glatten Topos die Existenz von nilpotenten Infinitesimals, die es Ihnen ermöglichen, sinnvoll Dinge wie "Wir eine Scheibe in unendlich dünne iskelische Dreiecke zu zerspannen".).)

Eine Möglichkeit, $ lambda $ -Calculus zu betrachten, ist ein einfaches und knackiges Modell von Parametersingprogrammen. Sie parameterisieren Code in nahezu jeder Programmiersprache, die Funktionen, Prozeduren oder Methoden sowie in jeder Sprache mit Modulen verfügt oder mit der Sie Typen Parameterise -Typen ermöglichen. Die Parametrisierung ist eine Form der Wiederverwendung. Da $ lambda $ -Calculus so einfach ist, treten die Gemeinsamkeiten zwischen vielen Programmiersprachen, die es Ihnen ermöglichen, den Code zu parameterisieren, besonders deutlich in den Vordergrund.

Es ist sicherlich möglich, ein sehr guter Programmierer zu sein, ohne von $ lambda $ -Calculus zu wissen, aber Sie verpassen etwas Schönes, das auch sehr nützlich ist.

Microsoft Linq (Language Integrated Query) transplantiert funktionale Programmierfunktionen in prozedurale Sprachen. Es nutzt $ lambda $ -Calculus umfangreich und entwirft Abhängigkeiten und Trennung von Teilen des Ausdrucksbaums, der an den Datenbankserver delegiert werden kann. Dies ist eine äußerst praktische Anwendung mit hohem kommerziellem Wert.

Ich habe eine kleine kommerzielle Anwendung mit einer funktionalen Sprache geschrieben und kann Ihnen versichern, dass sie sich zwar für Akademiker und Forscher lohnen, aber weniger nützlich sind als ihre prozessualen Cousins. Wirklich, es ist eine Frage von Pferden für Kurse, und am praktischsten ist eine Sprache, die bei Bedarf prozedural oder funktional sein kann. Infolgedessen werden funktionale Funktionen, die (zu C#) zur Unterstützung von LINQ eingeführt wurden, wie z.

Wenn Sie also endlich gezwungen sind, eklige Dinge zu tun, weil Sie bezahlt werden möchten, finden Sie möglicherweise $ lambda $ -Calculus nützlicher als Sie erwartet hatten, obwohl Sie mit ziemlicher Sicherheit mit ziemlicher Sicherheit erwartet werden Gewohnheit Verwenden Sie eine funktionale Sprache.

Ohne mehr darüber zu wissen, höre ich, dass Linguisten Lambda -Kalkül verwenden.

http://www.sfu.ca/~jeffpell/ling406/lambdaabstractionoh.pdf, https://files.nyu.edu/cb125/public/lambda/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top