
Am Sonntag 14 Juni 2009 17:19:22 schrieb Gjuro Chensen:
Hello everyone!
Im a Haskell newbie, and Ive have few unanswered questions. For someone more experienced (at least I think so) its a very simple task, but I just cant get a grip on it and its pretty frustrating. It wouldn't be that bad if I haven't browse thru bunch of pages and tutorials and still nothing... The problem is: take a string, and if every words starts with uppercase letter then print yes, else no. Forum Text Bold -> yes Frog image File -> no
Ive had my share of approaches to this, but I just cant make it work. Standard one seemed the most simple:
search :: String -> String search [] = []
and then use words (splits string on space) to split the string so I could
That's good. So you have everyWordStartsWithAnUppercaseLetter string = doSomething (words string) doSomething :: [String] -> Bool checks wordStartsWithAnUppercaseLetter :: String -> Bool for each word in the list and returns True if all words satisfy the condition, False if not. There's a handy function in the prelude for that: Prelude> :t all all :: (a -> Bool) -> [a] -> Bool
get a list and go through it recursively. But how to apply words to entered string in this form?
To find the first letter I came up with: first = take 1 (head x). And
No, I don't think that's what you want: Prelude> :t (take 1 . head) (take 1 . head) :: [[a]] -> [a] Since String is a synonym for [Char], "head" gets the first letter of a word.
compare it with elem or ASCII values to determine if its upper case.
What about unicode strings? Prelude> :t Data.Char.isUpper Data.Char.isUpper :: Char -> Bool is what you want.
Any help, advice or suggestion is appreciated.
Thanks in advance!
How to assemble that is left to you.