palindromeTest
Votre expression:
(\verb -> verb ++ reverse verb) verb
ne fait pas beaucoup de sens: une expression équivalente serait:
(\x -> x ++ reverse x) verb
depuis verb
dans l'expression lambda a été SCOPED localement. Mais vous savez ce que x
est: c'est verb
. Ainsi, vous pouvez remplacer l'expression avec:
verb ++ reverse verb
Ou en pleine:
palindromeTest verb = isPalindrome (verb ++ reverse verb) == True
On peut aussi éliminer le == True
, puisque \x -> x == True
est équivalent à id
:
palindromeTest verb = isPalindrome (verb ++ reverse verb)
Enfin, le where types = verb::String
est inutile aussi: Haskell est typé statiquement, les types sont résolus au moment de la compilation. Donc, cette déclaration n'ajoute rien. Vous pouvez limiter le type de verbe dans la signature de type de la fonction:
palindromeTest :: String -> Bool
palindromeTest verb = isPalindrome (verb ++ reverse verb)
isPalindrome
Tout comme dans palindromTest
il est inutile d'écrire == True
, il n'y a aucune raison d'écrire = True
et = False
si cela est basé sur une condition: il suffit de retourner l'état lui-même:
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome x = reverse x == x
Vous pouvez le rendre plus compact en utilisant ap
:
import Control.Monad(ap)
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome = ap (==) reverse
types est là pour QuickCheck – kaboom
@kaboom: qui n'a pas d'importance: quicktest est rien de spécial: il crée un exécutable Haskell ainsi, il passe par le compilateur ainsi. –
werid, j'étais sous l'impression qu'il est nécessaire, basé sur le tutoriel QuickCheck. Quoi qu'il en soit, merci! – kaboom