Ввод нижнего регистра и удаление символов в 1 функции с помощью Haskell - PullRequest
1 голос
/ 13 февраля 2012

Я так горжусь собой!^ _ ^

Наконец-то я могу написать работающие на Haskell функции!

:: [String] -> [String]
lowerCase = nub.map (map toLower)
returnLowers = nub.map (filter isLower)

После того, как ввод пользователя разделен на список с использованием функции words , my lowerCase функция строчных букв вводит пользовательский ввод (это облегчит сопоставление слов / шаблонов, которое я хочу сделать позже в программе), а моя returnLowers функция фильтрует и возвращает толькострочные буквы для удаления любых символов, цифр и т. д.

Но я заметил, что обе эти функции используют nub.map , и мне было интересно, есть ли способ, которым я мог бы объединить эти2 функции в 1 супер функцию для удаления избыточности из кода.

Ваша помощь будет оценена.

1 Ответ

4 голосов
/ 13 февраля 2012

Вы можете определить

nubMap f = nub . map f

, а затем

lowerCase = nubMap (map toLower)
returnLowers = nubMap (filter isLower)

, но я не вижу никакого преимущества;что у тебя сейчас выглядит нормально.Дублирование минимально и частично иллюзорно: обе функции на самом деле не используют nub.map, они используют nub . map f для некоторых f.Это может показаться педантичной точкой, но вы не можете определить foo = nub.map, а затем определить обе функции с ней (на самом деле это ошибка типа).В частности, nub.map f на самом деле nub . (map f), а не (nub . map) f.

...