Bonsoir,
je suis débutant en programmation fonctionnelle et j'ai du mal à comprendre la notion de continuation mis en œuvre par la fonction call/cc, voici un exemple d'utilisation de la notion de mémorisation de continuations:
une deuxieme version
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 (define saved'*dammyvalue*) ;; pour mémoriser la continuation (define (strange-sum l) ;; la somme des nombre d'une liste (if (null? l) 0 (+ (car l) (if (null? (cdr l)) (call/cc (lambda (f) (set! saved f) (strange-sum (cdr l)))) (strange-sum (cdr l))))))
une troisiemme version
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (define (strange-sum-0 l) (cond ((null? l) 0) ((zero? (car l)) (call/cc (lambda (f) (set! saved f) (strange-sum-0 (cdr l))))) (else (+ (car l) (strange-sum-0 (cdr l))))))
pouvez vous m'expliquer svp ce que représentent ces continuations ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (define (strange-sum-1 l) (if (null? l) 0 (begin (cond ((zero? (car l)) (call/cc (lambda (f) (set! saved f))))) (+ (car l) (strange-sum-1 (cdr l))))))
pour la premiere version il me semble que la continuation liée à la variable saved est : (lambda(trou) (s + trou) ou s est la somme des nombres de la liste.
pour la deuxième et la troisième version, j'attends vos explications.
E. Bazaoga
Cordialement
Partager