Sequential numbers in a list haskell

前端 未结 3 1135
清酒与你
清酒与你 2021-01-26 11:55

I am new to haskell and I was attempting a few coding problems that I previously completed for java, however the following problem has me stumped.

Basically the idea is

相关标签:
3条回答
  • 2021-01-26 12:45

    This is a solution:

    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;
    };
    

    Another way would be using the isInfixOf method and asking if [1,1] appears anywhere on your list:

    consecutiveOnes :: [Int] -> Bool
    consecutiveOnes xs = isInfixOf [1,1] xs
    

    The isInfixOf function takes two lists and returns True iff the first list is contained, wholly and intact, anywhere within the second.

    But I'm sure there are many other ways of doing it.

    0 讨论(0)
  • 2021-01-26 12:57

    One way would be to use pattern matching to look for consecutive ones at the head of the list, and advance down the list until you find them, or you run out of elements to look at.

    consecutiveOnes [] = False
    consecutiveOnes (1:1:_) = True
    consecutiveOnes (_:xs) = consecutiveOnes xs
    
    0 讨论(0)
  • 2021-01-26 12:58

    You could also do it this way:

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

    If

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

    Then

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

    Zipping them together you get a list of pairs, where each pair is an element of the list and the element after it.

    zip xs (tail xs) == [(0,1),(1,1),(1,2),(2,3),(3,4)]
    
    0 讨论(0)
提交回复
热议问题