Элементы понимания и фильтрации списка - PullRequest
0 голосов
/ 10 января 2019

Я пытался создать понимание для технически простого списка, но я не уверен, сможет ли Хаскелл достичь результата, который я хочу получить так, как я ожидал.

Если бы я хотел составить список чисел от 1 до 20, отфильтровывая числа, которые не делятся на 3 и 5 одновременно, это было бы так же просто, как

[x | x <- [1..20], not $ x `mod` 3 == 0 && x `mod` 5 == 0]

Что приведет к списку с каждым числом от 1 до 20 без 15.

Но что, если бы я хотел, чтобы вместо исключения числа 15 эта позиция списка была бы заполнена 0? То же самое применимо, если диапазон был больше, и я хотел, чтобы в каждом случае, когда мой фильтр был ложным, вместо того, чтобы не брать число, он приписывал бы заранее определенное значение x (в моем примере 0), это может быть достигнуто с помощью понимания списка. или я должен использовать другое решение?

1 Ответ

0 голосов
/ 10 января 2019

Но что, если бы я хотел, чтобы вместо исключения числа 15 эта позиция в списке была бы заполнена 0?

В этом случае это не фильтрация, а отображение, в котором вы добавляете условие на карту таким образом, чтобы элементы, которые делятся на 3 и 5 (для этого конкретного случая, мы можем просто сказать, делим на 15), должны отображаться до 0:

[ <b>if mod x 3 == 0 && mod x 5 == 0 then 0 else x</b> | x <- [1..20]]

или более компактный:

[ if <b>mod x 15 == 0</b> then 0 else x | x <- [1..20]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...