Bonjour,
Sur ce code qui détecte si un item est un palindrome ou non:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 # let rec palindrome(s) = let lenItem = String.length(s) in if lenItem <= 1 then true else if s.[0] = s.[lenItem - 1] then palindrome(String.sub(s)(1)(lenItem - 2)) else false;;
si je trace palindrome sur:
ça donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part # palindrome("sages");;
Je ne comprends pas pourquoi le premier retour est faux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 palindrome <-- "sages" palindrome <-- "age" palindrome --> false palindrome --> false - : bool = false
"s" et bien égal à "s" on peut donc passer à la sous chaîne suivante et comparer "a" et "g" qui pour le coup ne sont pas égaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... if s.[0] = s.[lenItem - 1] then palindrome(String.sub(s)(1)(lenItem - 2)) ...
Pour un résultat identique j'ai une variante avec cette fois des opérateurs booléens:
Et j'avoue que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 # let rec palindrome(s) = let lenItem = String.length(s) in (lenItem <= 1) || (s.[0] = s.[lenItem -1]) && (palindrome(String.sub(s)(1)(lenItem -2)));;
qui code que les deux expressions sont vraies simultanément me laisse plus que dubitative...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... (s.[0] = s.[lenItem -1]) && (palindrome(String.sub(s)(1)(lenItem -2)));; ...
Partager