Información

Fecha de entrega Sin fecha de envío
Tiempo límite de envío Sin límite de envío

Inicia sesión

[1.2] Inférence de signatures

Types génériques

Il existe aussi des types génériques en Haskell qui permettent à certaines fonctions d'être utilisées avec plusieurs types. Par exemple, la fonction length qui calcule la longueur d'une liste, a pour type [a] -> Int, ce qui signifie qu'elle prend en argument une liste de n'importe quel type a et renvoie un entier.

De même, une fonction sum de type Num a => [a] -> a prend en argument une liste de nombres de n'importe quel type a (entiers, réels, etc.) et renvoie un nombre du même type.

Exemples

  • a : type quelconque
  • Num a => a : type numérique (Int, Integer, Ratio, Float, Double)
  • Integral a => a : type entier (Int, Integer)
  • Fractional a => a : type fractionnaire (Ratio, Float, Double)
  • Floating a => a : type flottant (Float, Double)
  • Ord a => a : type ordonnable (entiers, réels, caractères, ...)
  • Eq a => a : type comparable (entiers, réels, booléens, caractères, ...)

Pregunta 1:

Quelle est la signature la plus générique possible de la fonction suivante ?

f :: Integer -> Integer -> Integer
f x y = if x == y then x else (f x-1 y)
Pregunta 2:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x = x * (x + 1)
Pregunta 3:

Quelle est la signature la plus générique possible de la fonction suivante ?

f (x, y, z) = (x + 2.5) * y
Pregunta 4:

Quelle est la signature la plus générique possible de la fonction suivante ?

f (x, y) z = (x + 7 <= y) && z
Pregunta 5:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x y = x:y
Pregunta 6:

Quelle est la signature la plus générique possible de la fonction suivante ?

f l n = if n == 0 then [] else l
Pregunta 7:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x = (mod x)
Pregunta 8:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x = if x == 0 then 1 else f (x - 1)
Pregunta 9:

Quelle est la signature la plus générique possible de la fonction suivante ?

l s n = if s == [] then [n] else l (n:s) (n - 1)
Pregunta 10:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x y = x y + 1
Pregunta 11:

Quelle est la signature la plus générique possible de la fonction suivante ?

f x y = x (y + 1)
Pregunta 12:

Quelle est la signature la plus générique possible de la fonction suivante ?

f g h x = g (h x)
Pregunta 13:

Quelle est la signature la plus générique possible de la fonction suivante ?

f g h x = g h x
Pregunta 14:

Quelle est la signature la plus générique possible de la fonction suivante ?

g x y = g (x `mod` y) (g x y)