Haskell раскалывает строку - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть такая строка:

"Some sentence1. Some sentence2, Some sentence3, Some sentence4....."

и я бы хотел превратить его в список строк

["Some sentence1", "Some sentence2", "Some sentence3.".......]

Пока это то, что у меня есть:

foo :: String -> [String]
foor [] = []
| x /= ',' = [[x]] ++ foo xs
| otherwise = [[x] ++ foo xs]

, который не компилируется, тем более работа.

Помощь!

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

В вашем совпадении с шаблоном нет x.Именно поэтому он не компилируется и не работает.Но ваш код также не обрабатывает точки, поэтому он не будет работать правильно даже после компиляции, пока вы не исправите это.

2 голосов
/ 30 ноября 2010

Ваша функция не определяет x или xs. Вот почему он не скомпилируется.

foo [] = []
foo(x:xs) = something 

даст вам функцию, которая будет перебирать символы списка. Хотя вы, вероятно, захотите взглянуть на стандартную библиотеку еще немного, там есть функция, которая делает это тривиальным (обратите внимание, извините за расплывчатость, это похоже на домашнюю работу, поэтому я стараюсь не отдавать ее.)

0 голосов
/ 01 декабря 2010
import Data.Char
import Data.List

sentences :: String -> [String]
sentences str =
    case break isPunctuation str of
      (s1, _:s2) -> s1 : sentences (dropWhile isSpace s2)
      (s1, _) -> take 1 s1 >> [s1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...