[Haskell-cafe] Haskell - string to list isusses, and more

Daniel Fischer daniel.is.fischer at web.de
Sun Jun 14 11:59:42 EDT 2009


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.



More information about the Haskell-Cafe mailing list