
"Roger Whittaker"
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.