www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Viviane

Gepostet:
28.11.2009 18:53

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    
 
Siracusa

Gepostet:
28.11.2009 22:30

   
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    
 
Viviane

Gepostet:
28.11.2009 23:14

   
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    
 
Siracusa

Gepostet:
29.11.2009 00:40

   
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    
 
Viviane

Gepostet:
29.11.2009 01:42

   
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    
 
Siracusa

Gepostet:
29.11.2009 02:04

   
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! Smilie


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Viviane

Gepostet:
29.11.2009 02:20

   
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    
 
Siracusa

Gepostet:
29.11.2009 03:02

   
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    
 
Viviane

Gepostet:
29.11.2009 03:17

   
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