Так просто. Я хочу сгенерировать все подсписки списка, используя понимание списка.
то есть: getSublist [1,2,3] - это [[1], [2], [3], [1,2], [1,3], [2, 3], [1,2,3]]
Спасибо
Так просто. Я хочу сгенерировать все подсписки списка, используя понимание списка.
то есть: getSublist [1,2,3] - это [[1], [2], [3], [1,2], [1,3], [2, 3], [1,2,3]]
Спасибо
Это уже реализовано как Data.List.subsequences
, но если вы хотите определить его самостоятельно (для целей обучения), вы можете сделать это следующим образом:
Вы не можете сделать это только с помощью списков, но с некоторой рекурсией это выглядит так:
sublists [] = [[]]
sublists (x:xs) = [x:sublist | sublist <- sublists xs] ++ sublists xs
Чтение: единственный подсписок пустого списка — это пустой список. Подсписки x:xs
(то есть список с заголовком x
и хвостом xs
) — это все подсписки xs
, а также каждый из подсписков xs
с добавленным к ним x
.
subList
то, как вы написали это здесь, определено только для непустого списка — только для одного из двух конструкторов.
- person Mikael Vejdemo-Johansson; 01.03.2011
sublists = filterM $ const [False, True]
- person Tom Crockett; 01.03.2011