#haskell #split #tokenize
#haskell #разделение #маркировать
Вопрос:
Привет, эта функция должна принимать строку и возвращать список строк, разделенных на символ 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»]
Комментарии:
1. ну, было бы хорошо, если бы вы использовали хорошие имена переменных, я смотрю на это и просто все больше и больше запутываюсь.
Ответ №1:
Я уже упоминал об этом в вашем другом сообщении, но проблема с этим заключается в вашей subStr
функции. Если вы измените его на subStr s i j = take (j-i) (drop i s)
, он должен работать. И если это все, что вы хотите, отлично. Но это можно было бы написать более четко и легко, используя takeWhile или используя split
from data.Text .
Кроме того, введите подписи, пожалуйста. (Хотя я ценю, что на этот раз вы определили входные данные.) Они не только облегчают нам помощь, вы часто можете решить свои собственные проблемы в процессе их решения.
Комментарии:
1.
span
илиbreak
даже более полезны, чемtakeWhile
здесь.