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. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe