Запутанная функция приложения и состав функции в Haskell - PullRequest
0 голосов
/ 16 апреля 2011

Операция

(filter (`notElem` "'\"").[(1,'a','%',"yes")])

выдает ошибку. Как правильно применить этот фильтр в этом списке?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

У вас есть пара серьезных проблем.Во-первых, ваш синтаксис дурацкий (. определенно не должно быть там).Но большая проблема в том, что вы пытаетесь фильтровать тип [(Int,Char,Char,[Char])] (то есть список, содержащий 4 кортежа).

И в вашем списке есть только один элемент, который (1,'a','%',"yes").Так что фильтрация в любом случае бесполезна.Когда функция, которую вы предоставляете для фильтрации, должна иметь тип a -> Boolean, где a - это тип всех элементов списка.

Похоже, вы хотели какой-то вялый гетерогенный список или что-то в этом роде.

1 голос
/ 16 апреля 2011

Оператор . в Haskell - это композиция функций - он объединяет две функции вместе.

Таким образом, ваш код,

(`notElem` "'\"") . [(1,'a','%',"yes")]

выглядит как композиция функции notElemи некоторый список.Это просто неправильно.

Удалите ., и убедитесь, что show список первый:

> filter (`notElem` "'\"") (show [(1,'a','%',"yes")])
"[(1,a,%,yes)]"
...