Giter Club home page Giter Club logo

haskell-programming-from-first-principles's Issues

Proposed Enhancement: for AlgebraicDataTypes/ChapterExercises/AsPatterns.hs

At src/AlgebraicDataTypes/ChapterExercises/AsPatterns.hs

Expected:

isSubsequenceOf "blah" "wootbla" == False
isSubsequenceOf "blah" "halbwoot" == False

as stated in page 695 of the eBook "Haskell from the First Principle"

Actual:

isSubsequenceOf "blah" "wootbla" == True
isSubsequenceOf "blah" "halbwoot" == True

Proposed enhancement:

  indexOf :: (Eq a) => a -> [a] -> Int
  indexOf x ys = case elemIndex x ys of 
    Just a -> a 
    Nothing -> -1

  splitBy :: (Eq a) => a -> [a] -> ([a], [a])
  splitBy x = span (/= x)

  joinWithout :: (Eq a) => a -> [a] -> [a]
  joinWithout x ys = let (a, b) = splitBy x ys in (a ++ tail b)  

  isSubseqOf :: (Eq a) => [a] -> [a] -> Bool
  isSubseqOf [] _ = True 
  isSubseqOf _ [] = False
  -- @TODO: strip each element of the referenced list after each recursion
  isSubseqOf (x : xs) ys 
    | null ys'' = False
    | otherwise = 
        case xs of 
          (z : _) -> 
            let idX = indexOf x ys
                idZ = indexOf z ys in
            case (compare idX idZ) of 
              LT -> isSubseqOf xs (joinWithout x ys)
              _  -> False
          _       -> isSubseqOf xs (joinWithout x ys)
    where (ys', ys'') = splitBy x ys

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.