Gepostet: |
Registermaschine in Haskell | ||||||||||
Hallo! Ich soll eine Registermaschine in Haskell schreiben und habe da ein leichtes Problem mit der Aufgabenstellung. Denn: ERSTMAL brauche ich doch ein Hilfsprogramm, dass mir das Programm, das die Maschine testen soll, hochlädt oder nicht? Aber ich kann doch kein Programm schreiben, dass ein Programm aus einer anderen Datei hochlädt? |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Hallo, was verstehst du hier unter "hochladen"? Reicht es nicht das Programm aus einer Datei zu lesen und der Berechnungsfunktion für die Registermaschine zu übergeben? Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ist das nicht dasselbe? Ich meine: Ich schreibe meine Registermaschine (wobei ich noch nicht wirklich weiß wie das funktionieren soll) in Datei x. Das zu testende Programm ist in Datei y. Wie soll ich das Programm also übergeben, OHNE es hochzuladen? Ich meine wenn ich meine Registermaschine schreibe und in den hugs lade. so. ich nenne sie mal Anton und das Programm heißt Heinz meinetwegen, Dann müsste ich doch theoretisch im Prelude "anton Heinz" eingeben. Aber der Hugs weiß ja gar nicht was Heinz ist, der sieht ja nur 'nen String. Ich müsste das Programm doch erstmal laden, damit er erkennt, was Heinz ist, oder? |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Ja, das Programm musst du natürlich aus einer Datei laden. Da gibt es diverse Funktionen die hier zu finden sind: http://www.haskell.org/ghc/docs/latest/html/libraries/base/System-IO.html. | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Vielen vielen Dank, aber: Chinesisch. Vielleicht lass ich die Aufgabe bleiben und warte auf die Erklärung im Tutorium. An sich mach' ich mir nur Sorgen drum, dass ich völlig ungeeignet bin, wenn ich so 'ne Aufgabenstellung nicht verstehe. Das ist nämlich das eigentliche Problem, ich versteh' die Aufgabenstellung nur sehr vage. Gibt es eigentlich IRGENDWO ein Tutorium oder sowas, die Registermaschinen bzw. den SINN dahinter und auch, was neu definierte Datentypen in Haskell eigentlich MACHEN, verständlich für einen absoluten Anfänger erklärt? Bei uns heißt es nämlich immer "Macht mal" ohne sinnvolle Erklärung dazu. |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Hi nochmal, Haskell-Tutorials gibt es genug (siehe hier: http://www.haskell.org/haskellwiki/Tutorials), für meinen Geschmack sind die aber alle viel zu romanartig geschrieben und für Anfänger teils zu verwirrend. Infos zu Registermaschinen gibt's im Netz auch genug. Und zur Frage, was Datentypen eigentlich "machen": Nix, die sind einfach nur da. :-) Du kannst allerdings Funktionen schreiben, die etwas mit diesen Datentypen machen. Kannst du nicht mal die Aufgabenstellung posten (oden nen Link)? Weil so richtig klar ist mir noch nicht, was du genau machen sollst bzw. wie das mit dem Programm laden gedacht ist. In diesem Sinne: Mach mal! Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ich soll eine Funktion implementieren, die ein Programm ausgehend von der Startkonfiguration verarbeitet und, WENN das ganze terminiert, am Ende die Endkonfiguration der Maschine ausspuckt. Datentypen und Typdeklarationen sind vorgegeben. Danach soll ich das ganze an zwei vorgegebenen Programmen testen. Problem: -ich bin mir nicht sicher, dass ich wirklich verstanden habe, was genau die Konfiguration ist. - ich habe keinen blassen Schimmer, was ich mit Datentypen und Typdeklarationen anfangen soll, die nicht aussehen wie Strings, Ints, Booleans usw. Ich meine letztenendes ist "Cload Int" doch auch nur ein Int? - und: ich wüsste einfach gerne mal anhand eines Beispielprogrammes, meinetwegen x = x^2, WAS ich vorne in die Maschine reinschmeißen muss damit hinten WAS rauskommt. Ziemlich ahnungslos, oder? Ich könnte sogar abgeben, hab' genau so ein Programm, sogar in Haskell, im Netz gefunden. Nur: das bringt ja nichts, wenn ich nicht verstanden habe, was ich da tue. Grüße Viviane |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Die Konfiguration ist hier der Zustand der Register, sprich die Werte in den Registern. Dann zu Datentypen: Prinzipiell gibt es da type A = B was nichts anderes heißt, dass Typ A der gleiche ist wie B, nur einen neuen Namen bekommt. Normalerweise nutzt man das einfach, um klarzumachen, welche Bedeutung ein Wert dieses Typs hat. Desweiteren gibt es data A = A1 | A2 | ... was einen komplett neuen Datentyp A einführt. Der kann die Werte A1, A2, usw. annehmen. Die Werte von A können jetzt auch noch Parameter bekommen, das heißt dann, sie "speichern" noch Werte dieser Parametertypen, z.B.: data Figur = Kreis Int | Rechteck Int Int ist das gleiche wie type Radius = Int type Breite = Int type Hoehe = Int data Figur = Kreis Radius | Rechteck Breite Hoehe Im zweiten Beispiel ist beim Rechteck nun klarer, welcher Parameter welchen Wert speichert. Ich meine letztenendes ist "Cload Int" doch auch nur ein Int? Nicht ganz das gleiche, aber Cload speichert nur einen Int. Also ein Int "eingepackt" in einen neuen Datenkonstruktor. und: ich wüsste einfach gerne mal anhand eines Beispielprogrammes, meinetwegen x = x^2, WAS ich vorne in die Maschine reinschmeißen muss damit hinten WAS rauskommt Kann ich ohne die Datentypen und den Aufbau der Maschine jetzt nicht sagen, wie das genau aussehen müsste. Hier mal ein Beispiel wie es aussehen könnte: Load (Reg 1) (Addr 100) <-- x in Register 1 laden, x stehe jetzt mal im Speicher an Adresse 100 Multiplication (Reg 1) (Reg 1) (Reg 1) <-- Reg1 = Reg1 * Reg1 Store (Reg 1) (Addr 100) <-- Register 1 zurück in Speicher schreiben |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ok. Aber: Woher weiß er denn dass er das Laden soll? Ich meine Load ist doch einfach nur blind definiert unter data, aber der Programmiersprache wurde doch nirgends "erklärt" dass Load heißt dass irgendwas geladen werden soll. Und: brauche ich für verschiedene Programme verschiedene Registermaschinen? Gilt nicht EINE Maschine für jedes Programm? Ich kann Dir keinen Aufbau der Maschine sagen, das sind alle Infos, die ich habe. Ich finde Deine Geduld mit mir ja toll. Danke |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||