www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

chrisslater

Gepostet:
22.03.2009 16:37

Formeln der Aussagenlogik  
Hallo

Ich habe folgendes Problem

ich habe den Type AL mit

data AL =
V Char |
And AL AL |
Or AL AL |
Not AL

vorgegeben.

Nun soll ich eingegebene Variablen logisch verknüpfen und die Menge dieser in einer Liste aus geben, sodass ich z.B. bei Eingabe von (V 'c') And (V 'b') (V 'a')) als Ergebnis [c,b,a| erhalte.
Ich weiß nun leider auch nicht ob ich das Prinzip des Verknüpfens so richtig verstanden habe, aber ich hoffe.

Meine Idee hierbei war nun das:

getVars :: AL -> [Char]
getVars (V x) = [x]
getVars (And a b) = getVars a ++ getVars b
getVars (Or a b) = getVars a ++ getVars b
getVars (Not a) = getVars a


aber irgendwie geht das nicht so wie ich mir das vorgestellt habe...Ich hoffe ihr könnt mir dabei weiterhelfen.
Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 17:09

   
Sieht aber richtig aus. Was stört dich denn an dem Ergebnis? Das einzige Problem, was ich sehen würde, sind doppelte Variablen im Ergebnis. Die kannst du mit der Funktion nub aus Data.List eliminieren.
Zum Seitenanfang    
 
chrisslater

Gepostet:
22.03.2009 17:23

   
wenn ich das z.B so schreibe getVars ((V 'c') And((V 'a') (V 'b'))) dann kommt eine Fehlermeldung:

ERROR - Type error in application
*** Expression : V 'c' And (V 'a' (V 'b'))
*** Term : V
*** Type : Char -> AL
*** Does not match : a -> b -> c -> d

Was ist da jetzt passiert oder hab ich einfach etwas falsch eingetragen?

Zum Seitenanfang    
 
Siracusa

Gepostet:
22.03.2009 18:46

   
Dein Ausdruck ist kein richtiger aussagenlogischer Ausdruck. ((V 'a') (V 'b')) geht z.B. nicht, da fehlt ein Operator. Als Beispiel könntest du das hier nehmen: getVars (And (Or (V 'a') (V 'b')) (Not (V 'c')))
Zum Seitenanfang    
 
chrisslater

Gepostet:
22.03.2009 18:56

   
Ah. Ok dann geht das ja doch. Danke
Zum Seitenanfang