PDA

View Full Version : [Haskell]WinHugs compilare un file.hs


melarco
02-02-2010, 14:34
salve a tutti
sto cercando di compilare un file myreverse.hs con WinHugs il codice nel file è

myreverse [] = []
myreverse (x:xs) = myreverse(xs) ++ una volta caricato il file come faccio ad eseguirlo e a passare la lista???con quale sintassi????
grazie apresto

il-pollo
03-02-2010, 22:33
qua il codice funzionante:
myreverse :: [Int] -> [Int]
myreverse [] = []
myreverse (x:xs) = (myreverse xs) ++ [x]

con winhugs, la cosa più comoda da fare è usare l'icona "Open" per aprire un file .hs
una volta che l'ha caricato senza darti errori, puoi chiamare la funzione presente nel programma con la stessa sintassi con cui l'hai definito
Main> myreverse [3,4,1,5,6]
[6,5,1,4,3]
ciao!

p.s.: occhio alla notazione Curry!!! ( es: f(x,y,z) si scrive f x y z )

melarco
04-02-2010, 10:11
ok tutto chiaro!!!
l' ultimo dubbio: se voglio confrontare 2 liste creandone una in uscita con gli elementi in comune??
Ho scritto questo codice ma confronta solo il primo elemento della prima con tutti quelli della seconda;come faccio a far ripartire il tutto passando il secondo della prima lista ...cosi via???

liste[][]=[]
liste (x:xs)(y:ys)= duplic(x:xs,y:ys,x)
duplic(x:xs,y:ys,n) =
if(y == n)
then y : dup(xs,ys,n)
else duplic(xs,ys,n)
duplic([],[],n) = []
grazie

il-pollo
04-02-2010, 12:12
io userei la funzione predefinita nel prelude elem per sapere se un elemento è presente in una lista o meno

ho basato la ricorsione sulla prima lista

duplic :: [Int] -> [Int] -> [Int]
duplic [] _ = []
duplic (x:xs) ys = if (elem x ys)
then (x : duplic xs ys)
else duplic xs ys