Haskell 如何将其转换为尾部递归?哈斯克尔
我试图获取列表中元素的索引 然而,我遇到的问题是当元素不在列表中时 我想也许尾部递归是正确的,但我不确定该怎么做Haskell 如何将其转换为尾部递归?哈斯克尔,haskell,tail-recursion,Haskell,Tail Recursion,我试图获取列表中元素的索引 然而,我遇到的问题是当元素不在列表中时 我想也许尾部递归是正确的,但我不确定该怎么做 whatIndex sought [] = -1 whatIndex sought (a:xs) = if sought == a then 0 else 1 + whatIndex sought xs 编辑: 当它不在列表中时,它应该返回-1 例如: whatIndex 3 [1,2,3] == 2 whatIndex 3 [0,1,2]
whatIndex sought [] = -1
whatIndex sought (a:xs) =
if sought == a
then 0
else 1 + whatIndex sought xs
编辑:
当它不在列表中时,它应该返回-1
例如:
whatIndex 3 [1,2,3] == 2
whatIndex 3 [0,1,2] == -1
编辑:
能够让它工作。当然你有
数据。List.findIndex
。如果你想自己写,有很多方法,例如:
import Control.Monad
whatIndex x = msum . zipWith f [0..] where
f i y = if x == y then Just i else Nothing
。。。它返回一个
可能是Int
。如果您坚持使用-1 hack,请在msum
前面添加fromaybe(-1)$
(它来自数据。Maybe
)您熟悉累加器的概念吗?辅助函数(通常称为go
)?我理解累加器的概念,但不是辅助函数。问题是什么?当元素不在列表中时,您希望发生什么情况?@KelseyAbreu通常在某些事情可能失败时(例如,未找到元素),函数可能会返回。@KelseyAbreu如果您回答了自己的问题,您应该将发现的作为答案发布,并接受正确的答案。StackOverflow的目标只是部分地回答问题;另一部分是创建一个工件,该工件对于将来有类似问题的访问者非常有用。