Gepostet: |
Hakell-Stil | ||||||||||
Hallo Haskellianer, Ich würde gern mal eure Meinung zu diesem Programm hören. Ist das halbwegs haskellmäßig, ich bin mir da noch sehr unsicher. Manches ist da imho ziemlich kryptisch und schwer zu lesen, wie würdet ihr das schreiben? Oder kommt mir das nur aufgrund meiner mangelnden Erfahrung so unleserlich vor? Insbesondere die letzte Zeile in positions', die eigentlich die ganze Arbeit macht. Wie hättet ihr die Fallunterscheidung gelöst? Das ganze soll die Positionen in Termen auflisten. Einen Term kann man als als Baum sehen, der aus Funktionssymbolen und Variablensymbolen aufgebaut ist. Die Blätter sind konstante Funktionssymbole (ohne Argumente) und Variablensymbole. zB: f(x, g(a(), y), b()) mit Funktionssymbolen: f, g, a, b und Variablensymbolen: x, y f ist die Wurzel hat also Position [] x ist das erste Argument hat Position [1] g(a(), y) hat Pos [2] b() hat Pos [3] so steigt man rekursiv ab: a() hat Pos [2,1] y hat Pos [2,2] positions gibt also eine Liste von Listen von Ints zurück. Für das Beispiel: [[],[1],[2],[2,1],[2,2],[3]] varPositions eine Teilmenge davon, nämlich nur die Positionen von Variablensymbolen: [[1],[2,2]] analog für Positionen von Funktionssymbolen: [[],[2],[2,1],3] Ich hoffe, dass ich das halbwegs verständlich erklärt habe... Hier der Code: module Term (Term, isVariable, positions, funPositions, varPositions) where liebe Grüße, Bene |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich finde deine funktionen sehr übersichtlich. man hätte die fall unterscheidung noch mit nen oder zusammenfassen können...aber das macht es nicht unbedingt verständlicher | (pt == Var)|| (pt == All) = [my] gruß Jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Danke für dein Feedback! Ich muss mein Hirn wohl erst an Haskell bzw. funktionale Programmierung gewöhnen ;) Kennst du vielleicht ein gutes (ich meine damit einfach zu bedienendes) Parserframework? (Davon gibs für Haskell ja sicher einige) Das ganze soll nämlich ein einfaches Termersetzungssystem werden, wenns fertig ist. Ist ein Uniprojekt. lg, Bene |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
"Parserframework" -> Müsste sowas wie >WinHugs< sein, oder? Also mit dem du die Programme ausführen kannst... zu deinem script kann ich wenig sagen, da ich so gut haskell selber nicht kann xD |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ich benutze Hugs98 und Jedit zum Programmieren. Jedit beherrscht nämlich syntaxhighligthing für Haskell gruß Jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ich probiers jetzt mal mit Parsec, eine Alternative wäre Happy. Naja ich experimentier mal ein bisschen damit herum. lg, Bene |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
^^ hab ich noch nie von gehört...kannst du mal den lin posten ? man lernt ja nie aus gruß Jacke |
|||||||||||
Zum Seitenanfang | |||||||||||