Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parBénédicte Bouffard Modifié depuis plus de 8 années
1
IFT359 – Programmation fonctionnelle exercice backquote, unquote, unquote-splicing 1
2
Interpolation de listes quasiquote « ` » est aux listes ce que format est aux string quasiquote suspend l’évaluation comme quote, sauf qu’il peut contenir : –unquote «, » qui force l’évaluation –unquote-splicing «,@ » qui 1.force l’évaluation d’une expression –(Cette expression rune liste) 2.insère les éléments directement (i.e. sans les parenthèses)
3
Équivalence entre list/append/' et `/,/,@ `x = 'x `,x = x `(x) = (list 'x) `(,x) = (list x) `(x,x) = (list 'x x) `(,@x) = (append x) `(x,x,@x) = (append (list 'x) (list x) x)
4
Exemples Soit (define a 1) (define b 2) (define c 3) (define l '(x y z)) (let ([v 'x]) `(λ (,v) (*,v,v))) (λ (x) (* x x)) `(a b,c) (a b 4) `(a,@l c) (a x y z c) ((λ (x) `(,x ',x)) '(λ (x) `(,x ',x))) exercice '((λ (x) `(,x ',x)) '(λ (x) `(,x ',x)))
5
Exercice avec backquote 5 Définir combine, la procédure tail-recursive qui combine deux listes triées, et où deux éléments peuvent être égaux sans être identiques. Votre définition doit utiliser les notions que nous venons de voir. Pour simplifier le problème considérer que l’opérateur d’égalité est = et que celui de plus petit est < solution à la prochaine diapositive.
6
Exercice avec backquote 6 (define (combine ls1 ls2) (letrec ([iter (λ (acc liste1 liste2) (cond ((null? liste1) `(,@acc,@liste2)) ((null? liste2) `(,@acc,@liste1)) ((= (car liste1) (car liste2)) (iter `(,@acc,(car liste1),(car liste2)) (cdr liste1) (cdr liste2))) ((< (car liste1) (car liste2)) (iter `(,@acc,(car liste1)) (cdr liste1) liste2)) (else (iter `(,@acc,(car liste2)) liste1 (cdr liste2)))))]) (iter null ls1 ls2)))
7
Exercice avec backquote 7 Définir ( permuter_m_n m n ls), la procédure tail-recursive qui permute les éléments m et n d’une liste. Votre définition doit utiliser les notions que nous venons de voir. (permuter 1 4 '(a b c d e f g)) '(a e c d b f g) solution sur la prochaine diapositive
8
Exercice avec backquote 8 Définir ( permuter_m_n m n ls) (define (permuter m n ls) (letrec ([iter (λ (reste acc1 acc2 m n) (cond ((>= m 0) (iter (cdr reste) (cons (car reste) acc1) acc2 (- m 1) (- n 1))) ((>= n 0) (iter (cdr reste) acc1 (cons (car reste) acc2) m (- n 1))) (else `(,@(reverse (cdr acc1)),(car acc2),@(reverse (cdr acc2)),(car acc1),@reste))))]) (iter ls null null m n)))
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.