Bonjour
Si j'écris le programme suivant :
qui teste, comme vous l'aurez deviné, l'appartenance d'un élément à une liste, est-ce que le compilateur le reconnait comme une fonction récursive terminale? (elle l'est clairement en écrivant : )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let rec appartient x l = match l with | [] -> false | h::t -> (h = x) || (appartient x t);;------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let rec appartient x l = match l with | [] -> false | h::t -> if (h = x) then true else (appartient x t);;
Autre petite question : quelle est la complexité deEn d'autres termes, si !mem contient beaucoup d'éléments, est ce qu'en rajouter un va prendre beaucoup de temps?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fun x -> mem := (x::!mem) (* où mem est une 'a list ref définie dans le contexte *)
Merci
Fractal
Partager