מידע

מועד הגשה אין מועד הגשה
מגבלת הגשות אין הגבלה

כניסה

[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, ...)

שאלה 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)
שאלה 2:

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

f x = x * (x + 1)
שאלה 3:

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

f (x, y, z) = (x + 2.5) * y
שאלה 4:

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

f (x, y) z = (x + 7 <= y) && z
שאלה 5:

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

f x y = x:y
שאלה 6:

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

f l n = if n == 0 then [] else l
שאלה 7:

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

f x = (mod x)
שאלה 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)
שאלה 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)
שאלה 10:

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

f x y = x y + 1
שאלה 11:

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

f x y = x (y + 1)
שאלה 12:

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

f g h x = g (h x)
שאלה 13:

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

f g h x = g h x
שאלה 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)