我怎么把它变成尾递归?哈斯克尔

时间:2013-02-13 02:37:57

标签: 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] == -1

编辑: 能够让它发挥作用。

1 个答案:

答案 0 :(得分:2)

当然你有Data.List.findIndex。如果你想自己写,有很多方法,例如:

import Control.Monad

whatIndex x = msum . zipWith f [0..] where
  f i y = if x == y then Just i else Nothing

...返回Maybe Int。如果您坚持使用-1 hack,请在fromMaybe (-1) $前添加Data.Maybe(来自msum)。