我尝试使用reverse实现Maybe函数。我不知道如何使用递归在模式匹配中返回Just。例如,ghci> myReverse [1,2,3]需要返回Just [3,2,1]。这是我的代码:

myReverse :: [a] -> Maybe [a]
myReverse [] = Nothing
myReverse [x] = Just [x]
myReverse (x:xs) = myReverse xs ++ [x] -- here's my problem.


我以为myReverse (x:xs) = Just $ myReverse xs ++ [x]可以工作,但是不可以,我也不知道该怎么做。我想知道的是如何做到以及为什么。

谢谢你的帮助!

最佳答案

myReverse返回一个Maybe [a],由于它不是列表,因此不能直接附加到某个内容上。 IOW myReverse xs的值将是NothingJust <some list>。您需要对结果进行模式匹配。

myReverse (x:xs) =
    case myReverse xs of
         Just list -> ...
         Nothing   -> ...


当然,您需要根据myReverse的需要决定在每种情况下需要做什么。

另外请记住,并非每个函数都需要递归,因此可以根据需要从reverse调用常规的myReverse

09-26 03:13