Подсписки списка с использованием понимания списка - PullRequest
5 голосов
/ 01 марта 2011

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

то есть: getSublist [1,2,3] равен [[1], [2], [3], [1,2], [1,3], [2, 3], [1,2, 3]]

Спасибо

1 Ответ

7 голосов
/ 01 марта 2011

Это уже реализовано как Data.List.subsequences, но если вы хотите определить его самостоятельно (в целях обучения), вы можете сделать это следующим образом:

Вы не можете сделать это только со списком, но с некоторой рекурсией это выглядит так:

sublists [] = [[]]
sublists (x:xs) = [x:sublist | sublist <- sublists xs] ++ sublists xs

Чтение: единственным подсписком пустого списка является пустой список. Подсписки x:xs (то есть список с заголовком x и хвостом xs) - это все подсписки xs, а также каждый из подсписков xs с добавлением x к ним. .

...