#strin& #haskell #whitespace
#строка #haskell #пробелы
Вопрос:
Я хотел бы удалить пробел, расположенный после n
.
Например, username 123n u&as 423n peter 23n asd234
стало бы username 123nu&as 423npeter 23nasd234
.
Комментарии:
1. 10 вопросов, 0 принимается? Пожалуйста, пересмотрите. Все ответы не могли быть настолько плохими.
Ответ №1:
Я предполагаю, что вы хотите удалить один или несколько символов пробела в начале каждой строки, а не только первый символ пробела. Кроме того, я думаю, вы хотите удалить любые символы пробела, такие как табуляции, а не только буквенные символы пробела.
import Data.Char
stripLeadin&Whitespace :: Strin& -&&t; Strin&
stripLeadin&Whitespace = unlines . map (dropWhile isSpace) . lines
Комментарии:
1. Я понимаю ваше объяснение. Как это называется f (‘n’:’ ‘:a) в haskell? Постоянный шаблон. Функция рекурсии имеет только два параметра f (a: b) = a : fb, но шаблон имеет три параметра. Я этого не понимаю.
Ответ №2:
f [] = []
f ('n':' ':a) = f ('n' : a)
f (a:b) = a : f b
Комментарии:
1. Это решение удаляет только один пробел после каждой новой строки. Если целью является удаление всех начальных пробелов после каждой новой строки (неясно из описания), это небольшое изменение во второй строке сделает это: f (‘n’:’ ‘:a) = f (‘ n’:a)
2. Спасибо за совет; Я изменил свой ответ.
3. Можете ли вы объяснить решение? Справедливость
4. Он принимает список символов, и каждый раз, когда список начинается с последовательности <cr&&t;<пробел&&t;, он заменяет ее на <cr&&t; и затем повторно обрабатывает список. Если список не начинается с <cr&&t;<пробел&&t;, то из него удаляется первый символ и добавляется остальная часть списка (после его обработки). Это решение определенно сработает, но лично я нахожу то, которое упомянуто ниже (unlines.map(dropWhile isSpace). первая строка) немного более идиоматичная.
5. Я понимаю ваше объяснение. Как это называется f (‘n’:’ ‘:a) в haskell? Постоянный шаблон. Функция рекурсии имеет только два параметра f (a: b) = a : fb, но шаблон имеет три параметра. Я этого не понимаю.