PDA

View Full Version : [Haskell] Tipo di una funzione


guylmaster
12-10-2011, 12:17
Sinceramente non so se in questo forum esiste qualcuno che abbia mai programmato in Haskell, ma ci provo ugualmente.

Non riesco a capire perchè a questa funzione:

multxyz = x∗y∗z

è associato questo tipo:

mult :: Int -> (Int -> (Int -> Int))

quando nella descrizione sul libro di Haskell dice che questa funzione non fa altro che fare il prodotto di quei tre numeri acquisendo i numeri uno ad uno.

Cioè matematicamente non dovrebbe essere un dominio del tipo INTxINTxINT -> INT ? perchè Haskell lo descrive in quella forma strana li?

Vi ringrazio in anticipo per qualsiasi aiuto,
guylmaster.

shinya
12-10-2011, 14:17
http://en.wikipedia.org/wiki/Currying

In realtà in Haskell quella è una funzione che prende un intero e restituisce una funzione che prende un intero e a sua volta restituisce una funzione che prende un intero e torna un intero.

Mi spiego, no? :fagiano:

banryu79
12-10-2011, 14:42
*edit=sparato vaccata
(adesso vado e mi imparo Haskell, mi imparo :D)

shinya
12-10-2011, 15:23
*edit=sparato vaccata
(adesso vado e mi imparo Haskell, mi imparo :D)
Bravo!
Ci sono almeno un paio di libri online ben fatti e che puoi scaricare a ufo:
http://book.realworldhaskell.org/read/
http://learnyouahaskell.com/chapters (di questo mi pare ci sia anche la versione per kindle in giro da qualche parte se ti interessa)

banryu79
12-10-2011, 15:57
[OT]
Bravo!
Ci sono almeno un paio di libri online ben fatti e che puoi scaricare a ufo:
http://book.realworldhaskell.org/read/
http://learnyouahaskell.com/chapters (di questo mi pare ci sia anche la versione per kindle in giro da qualche parte se ti interessa)
Many thanks, avevo già scelto il secondo, la versione online almeno, dato che è gratuita.
Se hai un quick link per una versione kindle gratuita me lo gireresti (anche via PM)? Son qua che smanetto con la Haskell Platform e mi sto divertendo un mondo (hai presente quella bella sensazione che provi quando tutto è nuovo e non sai ancora un razzo di quello che ti aspetta? Ecco, una cosa così :D)

marco.r
12-10-2011, 21:57
http://en.wikipedia.org/wiki/Currying

In realtà in Haskell quella è una funzione che prende un intero e restituisce una funzione che prende un intero e a sua volta restituisce una funzione che prende un intero e torna un intero.

Mi spiego, no? :fagiano:

Esatto. Infatti per chiamare quella funzione si scrive

mult 6 7 8

che in realta' e' come scrivere

(((mult 6) 7) 8)



Per confronto, la funzione equivalente che prende come argomento tre interi e restituisce un intero si scrive nel modo seguente.

mult :: (Int,Int,Int) -> Int
mult (x,y,z) = x∗y∗z

...

mult (6,7,8)


In realta questa e' pero' funzione che prende come singolo argomento una tupla di tre interi.
In un certo senso quindi funzioni che prendono piu' argomenti in Haskell non esistono :D, per cui in pratica quando si parla di funzione che prende tre argomenti si intende il primo caso (che in generale e' quello usato in haskell perche' quello piu' comodo).

guylmaster
14-10-2011, 23:40
Qualcuno sa darmi il link diretto per scaricare Huge98 per MacOS? perchè sto impazzendo per trovarlo ma nulla (si trova solo un pacchetto enorme da utilizzare assieme ad Xcode, ma non è ciò che mi interessa). Altrimenti mi toccherà farlo girare su xp virtualizzato.

Ah dimenticavo, ma manuali in italiano proprio non se ne trovano?

marco.r
15-10-2011, 10:29
Intendi forse Hugs98 ?
http://cvs.haskell.org/Hugs/pages/downloading.htm

guylmaster
15-10-2011, 16:38
Intendi forse Hugs98 ?
http://cvs.haskell.org/Hugs/pages/downloading.htm

Già il link in quella pagina è corrotto, googlando e rigoglando sono riuscito a trovare un'altro sito che lo distribuiva :fagiano: