Principes de Programmation TD1 25 janvier 2017 Exercice 1 (Typage et Fonctionnel). Voici les λ-expressions d’opérateurs existants dans haskell : flip id (||) (&&) (&&) ($) (.) x y z = = = = = = = x y False _ True x x z y \x -> x if x then x else y False x \x -> \y -> x y \f -> \g -> \x -> f(g x) 1. Que font ces opérateurs ? 2. Quels sont leurs types ? 3. Quels sont les types des fonctions suivantes : owl jackpot dots swing bigmap wtf = = = = = = (.) $ (.) ($) . ($) (.) . (.) flip . (. flip id) map ($3) map $ ($) 3 4. Que font-elles ? 5. Que fait l’opérateur (!!) défini dans haskell par : (!!) :: [a] (x:_) !! 0 (_:l) !! n [] !! _ -> = = = Int -> a x l !! (n-1) undefined 1 Exercice 2 (Paresse et Listes). Que font les programmes suivants : un :: Int un = un deux :: Int deux = (\_ -> 2) un trois :: Int trois = [un, 2, 3] !! 2 quatre :: Int quatre = [2..] !! 2 cinq :: Int cinq = [2..] !! (-1) six :: Int six = map (*2) [2..] sept :: Int sept = [2..7] !! !! 1 6 2