логическая ошибка разделения строки

Здравствуйте, эта функция должна принимать строку и возвращать список строк, разделенных на Char c. Я должен определить некоторые вспомогательные функции, но в настоящее время пользователь должен инициализировать аргументы, которые должны быть скрыты от них.

xs = выходной список, i = начальный индекс для substr, j = конечный индекс для substr

пример: разделить "123 456 789" ',' [] 0 0

должно дать ["789", "456", "123"]

split s c xs i j =
        if j == length s
        then (subStr s i j) : xs
        else if head (drop j s) == c
        then split s c (subStr s i j : xs) (j + 1) (j + 1)
        else split s c xs i (j + 1)

subStr s i j = take j(drop i s)

Когда я применяю функцию со следующими аргументами: split "123 456 789" ',' [] 0 0

Я получаю результат: ["789", "456 789", "123"]


person user2069328    schedule 26.06.2014    source источник
comment
ну было бы хорошо, если бы вы использовали хорошие имена переменных, я смотрю на это и просто путаюсь все больше и больше.   -  person sertsedat    schedule 26.06.2014


Ответы (1)


Я уже упоминал об этом в другом вашем посте, но проблема заключается в вашей функции subStr. Если вы измените его на subStr s i j = take (j-i) (drop i s), он должен работать. И если это все, что вы хотите, прекрасно. Но это можно было бы написать проще и понятнее с помощью takeWhile или с помощью split из data.Text.

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

person genisage    schedule 26.06.2014
comment
span или break здесь даже полезнее, чем takeWhile. - person Ørjan Johansen; 27.06.2014