2014-10-14 2 views
1

나는 기능 프로그래밍과 깨끗한 초보자입니다. Haskell의 words 함수처럼 공백에 문자열을 분할하고 싶습니다. 정리에서 공백에 문자열을 분할하는 방법?

words :: String -> [String] 
input: "my separated list " 
output: ["my","separated","list"] 

는 하스켈에서 정의입니다 :

words :: String -> [String] 
words s = case dropWhile {-partain:Char.-}isSpace s of 
      "" -> [] 
      s' -> w : words s'' 
       where (w, s'') = 
        break {-partain:Char.-}isSpace s' 

그러나 청소 break을 가지고 있지 않으며, 나는 그것이 무엇을 의미하는지 몰라, 어떻게 청소에 그것을 구현하기 :

s' -> w : words s'' 
where (w, s'') 
+1

글쎄, 당신은 당신이 예,이 기능을 마칠 수있을 거라고 다음 CLEAN에서 휴식 기능을 구현하는 경우? 그런 다음 haskell에 대한 break에 대한 정의를 살펴보십시오. 내가 올바르게 기억한다면 그것은 많은 멋진 트릭을 사용하지 않고 이해하기가 매우 쉽습니다. – bheklilr

+1

누군가 비슷한 질문을 한 것처럼 보입니다 http://stackoverflow.com/questions/26357128/split-string-to-a-list- of-strings-in-clean – shakirthow

+0

만약 내가 break를 구현한다면, 나는 어떻게 작동하는지 알지 못하는 강조된 구문 구조를 유지한다. – Thomas

답변

1

StdEnvApi document 권고대로 StdList API 함수 (섹션 6, 20 페이지)를 사용하려면 String을 목록으로 변환해야합니다. 이이 같은 결과 :

splitString :: String -> [String] 
splitString x = [foldr (+++) "" i\\i<- splitString` (fromString x)] 
    where 
     splitString` :: [String] -> [[String]] 
     splitString` x = let (p, n) = span ((<>) " ") x in 
      if (isEmpty n) [p] [p:splitString` (tl n)] 
관련 문제