Ich lerne immer noch funktionale Programmierung (mit f #) und habe kürzlich angefangen, über Rechenausdrücke zu lesen. Ich verstehe das Konzept immer noch nicht ganz und eine Sache, die mich unsicher macht, wenn ich alle Artikel über Monaden lese (die meisten basieren auf Haskell), ist die Beziehung zwischen Rechenausdrücken und Monaden.
Nachdem ich das alles geschrieben habe, ist hier meine Frage (eigentlich zwei Fragen):
Ist jeder F # -Berechnungsausdruck eine Monade? Kann jede Monade mit einem F # -Berechnungsausdruck ausgedrückt werden?
Ich habe diesen Beitrag von Tomas Petricek gelesen und wenn ich ihn gut verstehe, heißt es, dass Rechenausdrücke mehr als Monaden sind, aber ich bin mir nicht sicher, ob ich das richtig interpretiere.
functional-programming
Grzegorz Sławecki
quelle
quelle
Antworten:
Zuallererst sind Rechenausdrücke ein Sprachmerkmal, während Monaden mathematische Abstraktionen sind, so dass sie aus dieser Sicht völlig verschiedene Dinge sind .
Aber das wäre keine sehr nützliche Antwort :-). Rechenausdrücke sind eine Sprachfunktion, mit der Sie eine Syntax erhalten, die zum Programmieren mit Berechnungen (oder Datentypen) mit monadischer Struktur, aber auch mit anderen Strukturen verwendet werden kann. Sie können mein F # -Berechnungsausdruck-Zoopapier für weitere Details lesen , aber Berechnungsausdrücke können verwendet werden mit:
MonadPlus
oderMonadOr
)Rechenausdrücke sind also sicherlich eng mit Monaden verbunden, aber nicht so eng mit ihnen. Dies steht z. B. im Gegensatz zu Haskells
do
Notation, die viel enger mit Monaden verknüpft ist (obwohl auch dies mit Berechnungen verwendet werden kann, die keine rein mathematischen Monaden sind).quelle
Sie können Rechenausdrücke verwenden, um Monaden auszudrücken. Es ist ein Beispiel hier . Wie Sie bereits bemerkt haben, können Sie Berechnungsausdrücke nicht nur für Monaden verwenden. Es gibt eine ausführliche Erklärung, wie sie sich hier unterscheiden . Hier ist kein Platz, um den Unterschied richtig zu erklären, aber Rechenausdrücke unterscheiden sich von Monaden darin, dass sie die normale F # -Syntax wiederverwenden und zusätzliche Abstraktionen hinzufügen können. Eine Einschränkung besteht darin, dass es nicht idiomatisch (und schwierig) ist, einen Rechenausdruck zu schreiben, der über die Art der Berechnung polymorph ist.
quelle