列表中的顺序号码具有优势

时间:2017-03-25 20:22:40

标签: list loops haskell

我是haskell的新手,我正在尝试一些我以前为java完成的编码问题,但是下面的问题让我感到难过。

基本上,我们的想法是编写一个函数,该函数接受整数列表([Int]),确定整数列表中是否有连续的1。例如,以下输出将是: 输入:func [0,0,1,1,0] 输出:True

非常感谢haskell中针对此问题的示例解决方案, 感谢

3 个答案:

答案 0 :(得分:5)

一种方法是使用模式匹配在列表的头部查找连续的,然后向前推进直到找到它们,或者你的元素用完了。

DB::beginTransaction();

try {
    event(new LaravelQuestionPosted($question, $user));
    // Listeners: AddQuestionToQuestionsTable
    // Listeners: QuestionAddedNotificationSend
} catch (\Exception $e) {
    DB::rollback();
    // something went wrong
}

DB::commit();

答案 1 :(得分:2)

这是一个解决方案:

MultiDex.install(this);

另一种方法是使用isInfixOf method并询问[1,1]是否出现在您的列表中的任何位置:

consecutiveOnes :: [Int] -> Bool
consecutiveOnes xs = auxOnes False xs

auxOnes :: Bool -> [Int] -> Bool
auxOnes b [] = False
auxOnes b (x:xs) = case (x==1 && b) of {
    True -> True;
    False -> auxOnes (x==1) xs;
};
  

isInfixOf函数接受两个列表,如果是第一个则返回True   列表完整且完整地包含在第二个内的任何地方。

但我确信还有很多其他方法可以做到。

答案 2 :(得分:1)

你也可以这样做:

consecutiveOnes [] = False
consecutiveOnes xs = any (== (1,1)) $ zip xs (tail xs)

如果

 xs == [0,1,1,2,3,4]

然后

tail xs == [1,1,2,3,4]

将它们拼凑在一起就会得到一对对列表,其中每对都是列表的元素和后面的元素。

zip xs (tail xs) == [(0,1),(1,1),(1,2),(2,3),(3,4)]