www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

vorherige Seite 1 2  

Jacke

Gepostet:
04.02.2006 02:57

   
ich antworte dir sobald ich etwas geschlafen habe...:-)
gruß jacke
Zum Seitenanfang    
 
Jacke

Gepostet:
04.02.2006 11:33

   
ok ich hab dir einfach mal den anfang programmiert den rest kriegste auch alleine hin Smilie

module Simplify where

data Aexpr = Num Int |Var String |Add Aexpr Aexpr |Sub Aexpr Aexpr |Mul Aexpr Aexpr
|Div Aexpr Aexpr deriving (Show,Eq)

simplify::Aexpr->Aexpr

simplify (Mul (Var str) (Num 1)) = Var str
simplify (Mul (Var str) (Num 0)) = Num 0
simplify (Add (Var str) (Num 0)) = Var str
simplify (Sub (Var str) (Num 0)) = Var str
simplify (Mul x1 (Num 0)) = Num 0
simplify (Mul x1 (Num 1)) = simplify x1
simplify (Add x1 (Num 0)) = simplify x1


expr1= Mul(Var "blub")(Num 1)


use :
c:\simplify expr1
Var "blub"

gruß jacke

ps:wenn du fragen hast einfach stellen...;-)
Zum Seitenanfang    
 
serrambi

Gepostet:
04.02.2006 12:14

Danke!  
Vielen Dank,

aber ich verstehe noch nicht ganz warum einmal simplify (Mul (Var str) (Num 1)) = Var str

und dann nochmal : simplify (Mul x1 (Num 1)) = simplify x1


oder ist dann x1 noch ein zu vereinfachender ausdruck?

oh mann , habe ja schon ganz ander sachen gemacht in haskel aber wenn es um selbst definierte datentypen geht

verstehe ich die haskell-welt nicht mehr:-)!


ich werde dann mal etwas rumtüfteln!


gruß serrambi
Zum Seitenanfang    
 
Jacke

Gepostet:
04.02.2006 14:16

   
ja genau x1 kann man noch weiter vereinfachen...deswegen wende ich da die funktion noch weiter an...

ich meine ist ja klar ausdruck + 0 = ausdruck ^^
und ausdruck*1= ausdruck...

wie gesagt kriegste hin...:-)
und wo bleibt den der ganze spaß wenn ich alles löse Smilie

es fehtl zum beispiel noch ausdruck -0 =ausdruck ...und die kann man ja noch weiter vereinfachen...:-)
und wenn nicht dann mußte ebend noch den fall schreiben
simplify Var x=Var x
simplify Num x=Num x
usw.

ist alles rekursiv ...:-)
Zum Seitenanfang    
 
serrambi

Gepostet:
04.02.2006 16:26

??  


so habe jetzt die restliche ausdrücke hinzugefügt .

aber jett brauche ich doch irgendeine funktion die mit ifthenelse oder wächtern arbeitet oder nicht?

etwa so simplify expr = if expr==(Mul (Var str) (Num 1)) then Var str else ....



mein verständnis für diese aufgabe hat divh glaube ich net sehr von 0 entfernt !

wär nett wenn du mir nochmal helfen könntest .

Zum Seitenanfang    
 
Jacke

Gepostet:
04.02.2006 16:41

   
etwa so simplify expr = if expr==(Mul (Var str) (Num 1)) then Var str else ....

simplify (Mul x1 (Num 1)) = simplify x1
genau das macht dieser ausdruck doch schon...haskell sucht sich automatisch das richtige simplify raus...

wenn du das hier auch im quelltext hast...:
simplify Var x=Var x

dann kann haskell das alles auch auswerten...weil es das simplify nochmal Rekursiv auf x1 aufruft...und wenn in x1 dirnsteht das nochmal 0 dazu addiert werden soll dann wertet er das auch wieder aus ...usw...


Zum Seitenanfang    
 
serrambi

Gepostet:
04.02.2006 17:12

   
das is doch so aber noch nicht fertig:

> simplify :: Aexpr -> Aexpr

> simplify (Num x) = (Num x)
> simplify (Var x) = (Var x)
> simplify (Mul (Var str) (Num 1)) = Var str
> simplify (Mul (Var str) (Num 0)) = Num 0
> simplify (Mul (Num 1) (Var str)) = Var str
> simplify (Mul (Num 0) (Var str)) = Var str
> simplify (Add (Var str) (Num 0)) = Var str
> simplify (Add (Num 0) (Var str)) = Var str
> simplify (Div (Var str) (Num 1)) = Var str
> simplify (Sub (Var str) (Num 0)) = Var str
> simplify (Mul x (Num 0)) = Num 0
> simplify (Mul x (Num 1)) = simplify x
> simplify (Add x (Num 0)) = simplify x
> simplify (Add (Num 0) x) = simplify x
> simplify (Sub x (Num 0)) = simplify x
> simplify (Div x (Num 1)) = simplify x


bekomme folgende fehlermeldung:

Main> simplify Sub(Mul (Num 1) (Var "ober"))(Add (Mul (Sub (Var "ammer") (Num 0)) (Num 0))(Div (Var "gau") (Num 1)))
ERROR - Type error in application
*** Expression : simplify Sub (Mul (Num 1) (Var "ober")) (Add (Mul (Sub (Var "ammer") (Num 0)) (Num 0)) (Div (Var "gau") (Num 1)))
*** Term : simplify
*** Type : Aexpr -> Aexpr
*** Does not match : a -> b -> c -> d

oder wenn ich den gesamten ausdruck eigeklammert habe eien pattern match failure !

Zum Seitenanfang    
 
Jacke

Gepostet:
04.02.2006 17:46

   

module Simplify where

data Aexpr = Num Int |Var String |Add Aexpr Aexpr |Sub Aexpr Aexpr |Mul Aexpr Aexpr
|Div Aexpr Aexpr deriving (Show,Eq)


expr1= Mul(Var "blub")(Num 1)

simplify :: Aexpr -> Aexpr

simplify (Num x) = (Num x)
simplify (Var x) = (Var x)


simplify (Sub x y)
|((simplify y)==(Num 0))= (simplify x)
|otherwise =(Sub (simplify x) (simplify y))


simplify (Div x y)
|((simplify y)==(Num 1)) = (simplify x)
|otherwise =(Div (simplify x) (simplify y))

simplify (Add x y)
|((simplify x)==(Num 0)) =(simplify y)
|((simplify y)==(Num 0)) =(simplify x)
|otherwise = (Add (simplify x) (simplify y))

simplify (Mul x y)
|((simplify x)==(Num 0)) =Num 0
|((simplify y)==(Num 0)) =Num 0
|((simplify y)==(Num 1)) =simplify x
|((simplify x)==(Num 1)) =simplify y
|otherwise = (Mul (simplify x) (simplify y))




expr2=(Sub(Mul (Num 1) (Var "ober"))(Add (Mul (Sub (Var "ammer") (Num 0)) (Num 0))(Div (Var "gau") (Num

1))))


und so verwendet mans:
c:\simplify expr2
Sub (Var "ober") (Var "gau")

du hattest recht man kam um die fallunterscheidung doch nicht rum...
die striche sind wie if abfragen...und alles was danach in klammern steht ist die bedingung

simplify x y
|(Bedingung) = daswasausgeführtwerdensoll
|otherwise = undderelsezweig


gruß jacke

ps: hast aber super vorarbeit geleistet :-)
Zum Seitenanfang    
 
serrambi

Gepostet:
04.02.2006 18:04

Vielen Dank!  

Vielen Dank,

herrlich diese ironie!!;-)

ne ich habe das voll nicht gecheckt !

überhaupt keinen zugang zu dieser aufgabe !


du bist echt der wahnsinn;-)


hoffe ich muss dich nie wieder belästigen;-)

nochmals danke
Zum Seitenanfang    
 
Jacke

Gepostet:
04.02.2006 18:08

   
:-) kein problem...ich lern ja auch immer was dabei...

und ich hatte am anfang einfach nur die falsche idee...hätte einfach gleuch auf dich hören sollen

gruß jackeSmilie
Zum Seitenanfang    
 

vorherige Seite 1 2