我尝试使用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
的值将是Nothing
或Just <some list>
。您需要对结果进行模式匹配。
myReverse (x:xs) =
case myReverse xs of
Just list -> ...
Nothing -> ...
当然,您需要根据
myReverse
的需要决定在每种情况下需要做什么。另外请记住,并非每个函数都需要递归,因此可以根据需要从
reverse
调用常规的myReverse
。