테스트 준비를 위해 하스켈에서 과제를 진행 중입니다. 현재 작업은 다음 수식 뒤에 문자열을 토큰 화하도록 요청합니다. "tokenize str separate remove"를 실행하면 문자열 목록을 출력해야합니다. 문자열 "separate"에 나타나는 "str"의 모든 문자는 한 문자의 문자열이어야합니다. 문자열 "remove"에 나타나는 "str"의 모든 문자는 제거해야합니다. 분리형 또는 제거 형으로 나타나지 않는 문자는 함께 묶어야합니다.하스켈의 재귀 토크 나이저
예 보여준다
tokenize "a + b* 12-def" "+-*" " "
출력해야
["a", "+", "b", "*", "12", "-", "def"]
tokenize :: String -> String -> String -> [String]
tokenize [] _ _ = []
tokenize [x] _ _ = [[x]]
tokenize (x:xs) a b | x `elem` a = [x] : tokenize xs a b
| x `elem` b = tokenize xs a b
| otherwise = (x:head rest) : tail rest
where
rest = tokenize xs a b
그것은 다소 동작이 문제의 예에 해당 사업자 인 아래 내 현재 코드 그 앞에 오는 서신과 함께 번들로 제공됩니다. 별도의 문자열에있는 연산자에도 불구하고이
["a+","b*","12-","def"]
같은
.
문제는'| 그렇지 않으면 = (x : 머리 받침대) : 꼬리 받침대''머리 받침대 '에'x '를 놓으면 머리 받침대가 무엇이든 상관 없습니다. – sjakobi