Próbowałem rozwiązać problemy Haskella 99 i moja pierwsza próba była właśnie taka. Chociaż rozwiązanie może być trochę niepoprawne, po prostu chcę wiedzieć, dlaczego Haskell rzuca ostrzeżenie na pierwszą i daje błędny wynikczy Haskell jest wrażliwy na porządek w definicji funkcji?
> let { mylast (x:xs) = mylast xs; mylast [] = 0 ;mylast [x] = x;}
Pattern match(es) are overlapped
> mylast [1,2,3,58,8,6,1,231,10]
> 0
, ale poniższy kod działa poprawnie.
> let { mylast [] = 0 ;mylast [x] = x;mylast (x:xs) = mylast xs;}
> mylast [1,2,3,58,8,6,1,231,10]
> 10
BTW, zwracanie "0" jako "domyślne niepowodzenia" jest bardzo nie-Haskelowe. Powinieneś prawdopodobnie zrobić to: 'myLast :: [a] -> Maybe a'; 'myLast [] = Nic"; 'myLast [x] = Po prostu x'. – leftaroundabout
Po prostu uczę się Haskella i nie wiedziałem, jak zwrócić zero. Właśnie zacząłem patrzeć na może typ – Ramkumar