myReverse :: [Int] -> Int -> [Int]
myReverse [] n = []
myReverse (x:xs) n
| n < 0 = x:xs
| n == 0 = (-x):xs
| otherwise = x:(myReverse xs (n-1))
Cela indexe le tableau de 0
; votre exemple indexe de 1
, mais n'est pas défini pour le cas n == 0
. Le correctif pour prendre à l'index de 1
devrait être assez évident :)
De plus, votre capitalisation est incohérente; MyReverse
est différent de myReverse
, et seul ce dernier est valide en tant que fonction.
Résultats, à GHCi:
*Main> myReverse [10,20,30,40,50] 0
[-10,20,30,40,50]
*Main> myReverse [10,20,30,40,50] 2
[10,20,-30,40,50]
*Main> myReverse [10,20,30,40,50] 3
[10,20,30,-40,50]
*Main> myReverse [10,20,30,40,50] 5
[10,20,30,40,50]
*Main> myReverse [10,20,30,40,50] (-1)
[10,20,30,40,50]
version plus générique qui fait la même chose, en utilisant une définition inutile pour myReverse
:
myGeneric :: (a -> a) -> [a] -> Int -> [a]
myGeneric f [] n = []
myGeneric f (x:xs) n
| n < 0 = x:xs
| n == 0 = (f x):xs
| otherwise = x:(myGeneric f xs (n-1))
myReverse :: [Int] -> Int -> [Int]
myReverse = myGeneric negate
Cela sent comme les devoirs. Si oui, identifiez-le comme tel. –
'itemInverse' (ou' inverseItem') serait un meilleur nom, car "reverse" implique une opération entièrement différente sur les listes. – outis
ou 'negateItem'. Inverse peut signifier 1/x. – kennytm