我是haskell的新手,我正在尝试一些我以前为java完成的编码问题,但是下面的问题让我感到难过。
基本上,我们的想法是编写一个函数,该函数接受整数列表([Int]),确定整数列表中是否有连续的1。例如,以下输出将是: 输入:func [0,0,1,1,0] 输出:True
非常感谢haskell中针对此问题的示例解决方案, 感谢
答案 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)]