Bin ich eine Monade? Sind wir eine Monade? (Software und Hardware)

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 bin mit Haskell nicht allzu vertraut, aber I / O-Monade und Leibniz 'Idee der Monade scheinen insofern ziemlich weit voneinander entfernt zu sein, als eine Leibniz-Monade nicht mit ihrer Umgebung interagiert, zumindest nicht, wenn sie Eingaben aus der Umgebung entgegennimmt und dann etwas Sinn macht.
Wenn Sie eine Analogie ernst nehmen, würden Sie am Ende alles sein - sogar eine Stackexchange-Frage selbst :)
Ich bin mir nicht sicher, was hier die richtige Definition von Software ist, wenn Sie sagen wollen, dass die E / A-Monade sie von Hardware trennt. Oder in welcher Weise die Eingabe wirklich mit der Hardware zusammenhängt - es gibt eine Beziehung, wenn Sie an einen Benutzer denken, der eine Nummerntaste drückt, während das Programm läuft, das gebe ich Ihnen zu. Laufender Code ist Hardware, die nach Softwareregeln arbeitet. Ich würde sagen, dass Sie mit dieser Monade einen laufenden Code kapseln können, der nicht von weiteren Eingaben beeinflusst wird. Ist das eine Frage von Software vs. Hardware?
Ist das nicht verwandt? "Leibniz' Theorie ist am besten als Lösung für das Geist-Körper-Problem bekannt, wie der Geist mit dem Körper interagieren kann" en.wikipedia.org/wiki/Pre-founded_harmony
@LayGonzález Ich bin mir sicher, dass das der Grund für den Namen ist. Leute, die Computersprachen und ihre verwandten Konzepte entwerfen, mögen oft tiefe Metaphern, die an Wortspiele grenzen. Und dies wäre ein Beispiel dafür. Monaden wären die einzige Möglichkeit für die Interaktion zwischen unabhängigen Prozessen sowie die einzige Möglichkeit für einen Prozess, die Welt außerhalb des Computers zu beeinflussen.

Antworten (4)

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.

Gedanken strahlen Wärme aus. Es wirkt sich auf die unmittelbare Luftumgebung aus, was zu einer Ausdehnung und einem erhöhten Druck im Raum führen kann, was der entscheidende Faktor für das Herunterfallen einer sehr sehr instabilen Kugel auf dem Regal sein könnte, wenn ihr einige Vibrationen hinzugefügt werden von a Nachbar zu Fuß zum Beispiel. Sie könnten sich entscheiden, es wieder anzubringen und einen wichtigen Anruf verpassen, weil Sie sich zu weit davon entfernt haben, um es rechtzeitig abzuholen ....
Es gibt keine perfekte Isolierung, aber dies ist ein außergewöhnlich dummes Beispiel. Die Wärmemenge, die das Gehirn abstrahlt, hat wenig mit dem Denken zu tun.
Spaß beiseite, ich glaube, ich erinnere mich, irgendwo gelesen zu haben, dass es sehr viel tut! Es gibt eine Variation von 20 Watt über einer 20/30-Watt-Grundlinie.

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 mist eine Konstruktion zur Kapselung von Berechnungen. Sie können sich eine Monade als einen Kasten mit einer Funktion darin vorstellen. Das Binden von Monade aan Monade bsetzt 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...

Es hängt davon ab, ob.

Wenn du denkst

  1. Es gibt eine klare Trennung zwischen Geist und Körper
  2. der Verstand ist rein mathematisch
  3. Ein Mensch ist definiert als das, was dem Geist erlaubt, rein mathematisch zu bleiben, während er sich mit einem Körper verbindet

dann ja, du bist so etwas wie die IO Monade. Es gibt jedoch triftige Gründe, einem der drei oben genannten Punkte nicht zuzustimmen:

  1. Argumente gegen Dualismus
  2. Was ist mit Emotionen?
  3. Sicherlich ist ein Mensch mehr als das? Existiert ein Mensch nicht auch aus seinem Geist und Körper selbst?

Eine bessere Analogie

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 Worldes einzigartig ist, sodass nur eine Funktion es gleichzeitig verwenden kann. Auf diese Weise Worldexistiert 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 schreiben print:

print = (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 outputFunktion könnte so aussehen output :: String -> (*World -> (Void, *World)). Hier *Worldist die einzigartige Außenwelt. outputNimmt einen String und ergibt eine Funktion from *Worldto nothing und a new *World: Die Funktion verändert die Welt . Die printFunktion würde geschrieben werden als

print = output "world!" (snd (output "Hello " world))

Hier sndergibt das zweite Element eines Tupels. Da ganz links outputdas benötigt *World, was von ganz rechts geliefert outputwird, kann es nicht vor dem ganz rechts ausgeführt werden output. Daher gibt das Programm immer aus Hello 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.