[Haskell-beginners] Re: Defining 'words' in terms of 'span'

Tim Attwood timothyea at comcast.net
Tue Mar 16 16:54:24 EDT 2010


"Roger Whittaker" <roger at disruptive.org.uk> wrote in message 
news:20100316170815.GA19787 at disruptive.org.uk...
>I found some exam papers linked from this page:
> http://www.cs.chalmers.se/Cs/Grundutb/Kurser/d1pt/d1pta/external.html
>
> And I have been trying some questions from them.
>
> I'm currently baffled by question 2(b) on this one:
> http://www.cs.chalmers.se/Cs/Grundutb/Kurser/d1pt/d1pta/tenta2000-04.ps
>
>  A word is a sequence of alphabetic characters, which you can recognise
>  using the standard function
>
>  isAlpha :: Char -> Bool
>
>  Using span, define a function words :: String -> [String] which
>  finds a list of the words occurring in a string. For example,
>
>  words "Now is the winter of our discontent!"
>    == ["Now","is","the","winter","of","our","discontent"]
>
>  words "2+3" == []
>
>  words "1 by 1" == ["by"]
>
> Can anyone give me a clue how to start?

words' = filter (all isAlpha) . words

...but since they specifically want span in the answer I'd guess they want
some sort of recursive function

words' s = wGen s [] where
    wGen s a =
        let (n,ws) = span (\x -> not (isAlpha x)) s
            (w,ss) = span (isAlpha) ws
        in case (w=="",ss="") of
                True, _ -> reverse a
                False, True -> reverse (w:a)
                False, False -> wGen ss (w:a)

something ugly like that maybe.
 




More information about the Beginners mailing list