2016-04-06 2 views
0
Prelude> find odd [2,4,7,9,11] 
Just 7 

Я ожидаю, что это вернет [7,9,11], поскольку все они нечетные числа. Почему find возвращает Just 7?Почему поиск Haskell всегда возвращает только один элемент?

Есть ли способ сообщить функции odd, чтобы вернуть то, что я ожидаю?

+2

В таких случаях следует выяснить тип функции для вашей потребности затем спросить [hoogle] (https://www.haskell.org/hoogle). Для этого параметра поиска задачи ** (a -> Bool) -> [a] -> [a] **. – ArthurVard

ответ

3

Использование filter

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
3

Вы ищете filter, не find. Задача find состоит в том, чтобы найти первую, или сообщить, что ее нет. Задача filter - составить список всех из них.

6

Из documentation:

find функция принимает предикат и список и возвращает первый элемент в списке соответствующий предикат, или Nothing, если не существует ни одного такого элемента.

Использование filter вместо:

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
Смежные вопросы