如何找到列表中两个元素之间的距离?

时间:2019-03-26 02:13:59

标签: haskell

我必须找到列表中两个元素的首次出现之间的距离。我们正在使用的程序是Haskell。我一直在线旅行HOURS,以寻求有关如何启动或解决该问题的帮助。请帮忙!

这是我们的定义方式: gap :: (Eq a) => a -> a -> [a] -> Maybe Int

以下是一些示例:

> gap 3 8 [1..10]
Just 5

> gap 8 3 [1..10]
Nothing

> gap 'h' 'l' "hello"
Just 2

> gap 'h' 'z' "hello"
Nothing

2 个答案:

答案 0 :(得分:3)

预期会快速运行的答案:

if(vars.get("myvar") ! null){
    FileUtils.writeByteArrayToFile(myfile, bytes);
} else {
    FileUtils.writeByteArrayToFile(myfile, prev.getResponseData());
}

如果您不想依靠import Data.List (elemIndex) gap :: Eq a => a -> a -> [a] -> Maybe Int gap x y ls = elemIndex y $ dropWhile ((/=) x) ls ,则必须编写并添加自己的Data.List

在丹尼尔·瓦格纳(Daniel Wagner)反馈之后,一个替代方案:

elemIndex'

答案 1 :(得分:2)

这就是我要做的:

import Data.List (elemIndex)

gap :: Eq a => a -> a -> [a] -> Maybe Int
gap x1 x2 xs = do
    i <- elemIndex x1 xs
    j <- elemIndex x2 xs
    if i <= j
        then Just (j - i)
        else Nothing

dfeuer致谢,以提醒我elemIndex功能。