In Haskell , einer Programmiersprache, wird das Konzept der Input/Output-Monade verwendet, um die laufende Software von ihrer Interaktion mit der Hardware zu trennen (oder zu verbinden? (binden!)).
Deshalb frage ich mich, ob es richtig ist, mich als Monade (Software und Hardware, Geist und Körper) zu betrachten. Oder bin ich vielleicht in einer I/O-Monade? Oder sind wir alle zusammen mit dem Kosmos eine Monade?
Ich würde argumentieren, dass es einen bestimmten Teil von Ihnen gibt, der Ihre Verarbeitung entparallelisiert und Ihre Referenten an Äußeres bindet.
Das ist die Monade, die Hülle, die es Ihnen ermöglicht, sicher externe Referenzen zu haben, auf die Sie vorhersagbare, dauerhafte Wirkungen haben können, ohne dauerhaft an sie gebunden zu sein oder sie einzudämmen.
Dass es nicht alle von euch sind, viele von euch haben andere Ziele. Es ist nur die Schnittstelle des Bewusstseins.
Das Bewusstsein ist also die Monade, der größte Teil Ihrer Gehirnaktivität ist ein weitgehend reiner Prozess. (Die meisten Gedanken haben nur Auswirkungen innerhalb des Gehirns und nicht auf irgendetwas anderes, genauso wie ein reiner Prozess nur den Prozessorzustand beeinflusst, nicht die Außenwelt.)
Dann sind Sie als Anwendung eines (etwas) reinen Prozesses über eine Monade ein Prozess mit Wirkungen.
Eine Monade ist ein mathematisches Konstrukt. Im Allgemeinen ist es nicht typisch anzunehmen, dass Menschen mathematische Konstrukte sind.
Es kann jedoch berechtigt sein zu argumentieren, dass Sie „als Monade gut modelliert“ sind. Dies würde bedeuten, dass ein großer Erklärungswert daraus entstehen kann, sich selbst als Monade zu modellieren.
Wenn Sie später entscheiden, dass Sie „perfekt als Monade modelliert“ sind, dann kommt die nächste Ebene der Ontologie ins Spiel, wenn Sie fragen: „Wenn ich als Monade perfekt modelliert bin, bin ich dann tatsächlich eine Monade?“
Ich persönlich finde, dass ich zu unvollkommen bin, um in ein so kristallklares mathematisches Konstrukt zu passen, also würde ich nicht sagen, dass ich eine Monade bin. Vielleicht könntest du mich an einem guten Tag als solches modellieren.
Ob Sie vollkommen genug sind, um eine Monade zu sein, liegt an Ihnen.
Eine Monade m
ist eine Konstruktion zur Kapselung von Berechnungen. Sie können sich eine Monade als einen Kasten mit einer Funktion darin vorstellen. Das Binden von Monade a
an Monade b
setzt Box B in Box A. Auf diese Weise stellen Sie sicher, dass Funktion A ausgeführt wird, bevor Funktion B ausgeführt wird: B kann nicht vorher ausgeführt werden, da es das Ergebnis von A benötigt. Auf diese Weise ist es möglich, die Auswertungsreihenfolge in einer verzögerten Programmierung zu steuern Sprache 1 .
Im Fall der IO-Monade besteht der Zweck tatsächlich darin, das Programm selbst (das rein funktional ist) mit der Außenwelt (die unrein ist) zu verbinden. Dies ist nicht dasselbe wie das Verbinden von Software und Hardware. Das Programm läuft weiterhin auf Hardware (dem Prozessor). Allerdings kann bei der IO Monad eine reine Funktion Seiteneffekte haben (zB Schreiben in eine Datei). Monaden selbst sind nur Konstruktionen und können für alles verwendet werden, sogar für einfache Arithmetik. Der Vergleich mit einem Menschen ist also nur mit der IO Monad möglich.
Wichtig ist, dass man mit der IO Monad Nebeneffekte irgendwie von einer reinen Funktion abkoppelt, damit sie rein bleibt. Sieht das aus wie ein Mensch? Brunnen...
Wenn du denkst
dann ja, du bist so etwas wie die IO Monade. Es gibt jedoch triftige Gründe, einem der drei oben genannten Punkte nicht zuzustimmen:
Wenn ich Menschen in einer funktionalen Programmiersprache simulieren würde (und das habe ich tatsächlich getan, indem ich vor einigen Monaten eine Fußballmannschaft in Clean simuliert habe ), würde ich einen Menschen als eine Funktion betrachten, die eine Welt nimmt und eine neue Welt hervorbringt: einen Menschen hat Sinne, mit denen er die Welt beobachtet, verarbeitet und durch Handeln die Welt irgendwie verändert. Somit könnten wir den Typus eines Menschen schreiben als Human :: World -> World
.
Nun ist es wichtig, dass wir keine Funktion schreiben können, die die Aktionen von zwei Menschen wie folgt anwendet
two_humans :: Human Human World -> (World, World)
two_humans h1 h2 world = (h1 world, h2 world)
Nach Anwendung dieser Funktion haben wir zwei Welten, was niemals der Fall sein kann. Die reine und faule funktionale Programmiersprache Clean verwendet Eindeutigkeitstypisierung , um dieses Problem zu vermeiden. Was Sie tun, ist, dass Sie sagen, dass World
es einzigartig ist, sodass nur eine Funktion es gleichzeitig verwenden kann. Auf diese Weise World
existiert immer nur einer im Programm.
Fußnoten
1: Was steuert die Bewertungsreihenfolge?
In einer faulen Programmiersprache werden Funktionen ausgeführt, wenn das Ergebnis benötigt wird, und nicht, wenn der Prozessor den Punkt erreicht, an dem die Funktion geschrieben wird. Angenommen, es gäbe eine einfache Funktion
output :: String -> Void
, die die Eingabezeichenfolge auf dem Bildschirm ausgibt und nichts ergibt, könnte man eine Funktion schreibenprint = (output "Hello ", output "world!")
Bei der Ausführung kann dies sowohl
Hello world!
als auch anzeigen , da die Reihenfolge, in der die Funktionen ausgeführt werden, nicht definiert ist.world!Hello
Eine monadische
output
Funktion könnte so aussehenoutput :: String -> (*World -> (Void, *World))
. Hier*World
ist die einzigartige Außenwelt.output
Nimmt einen String und ergibt eine Funktion from*World
to nothing und a new*World
: Die Funktion verändert die Welt . Dieprint = output "world!" (snd (output "Hello " world))
Hier
snd
ergibt das zweite Element eines Tupels. Da ganz linksoutput
das benötigt*World
, was von ganz rechts geliefertoutput
wird, kann es nicht vor dem ganz rechts ausgeführt werdenoutput
. Daher gibt das Programm immer ausHello world!
.Beachten Sie, dass diese Syntax verwirrend ist (von rechts nach links) und viel Tipparbeit erfordert. Haskell hat die Bindungsfunktion (
>>=
), um zwei Monaden einfach miteinander zu verbinden.
Eine Monade ist ein Konzept in der Kategorientheorie – eine Theorie in der Mathematik; es wird so genannt, weil es ein einfaches Konzept ist - abgeleitet vom Begriff eines Monoids - dem (nützlich) einfachsten möglichen algebraischen Gerät.
Das hat sehr wenig mit Menschen oder gar dem Kosmos zu tun.
Was es mit Liebniz' Begriff einer Monade verbindet, ist dieser Begriff der Einfachheit und sehr wenig mehr - aber das hat viel mit Menschen, dem Kosmos und Gott zu tun; sein Text - die Monadologie - dreht sich alles um sie.
Dort sind Monaden alles einfache Substanzen - sie können nicht weiter zerlegt werden; sie bilden die Welt oder den Kosmos: menschliche Seelen, Materie- und Raumzeitatome und Gott.
Sie interagieren nicht direkt, sondern wirken durch eine von Gott geschaffene Harmonie.
Dies kann sinnvollerweise mit einer Kosmologie verglichen werden, die uns aus der Antike überliefert ist, und möglicherweise eine Inspiration dafür: Dies ist die Lucretiöse Atomtheorie. Für These drei in der Monadologie heißt es:
Etwas, das keine Teile hat, kann nicht erweitert werden, kann keine Form haben und kann nicht geteilt werden. Monaden sind also die wahren Atome der Natur – die Elemente, aus denen alles besteht.
Der bemerkenswerteste Unterschied zwischen ihnen besteht darin, dass die lukretische Gottheit jenseits dieser Welt ist – unveränderlich und dauerhaft; er nennt keine Beziehung zwischen ihnen; und dass der Geist der Menschen aus sehr feinen Atomen besteht; während Liebniz Geist durch Seele ersetzt (er ist ein christlicher Philosoph); und dies ist ein einzelnes Atom – oder in seiner Terminologie eine Monade.
virmaior
Ankur
Nikolaj-K
Lay González
Benutzer9166