Получить все комбинации списка в Haskell без использования понимания списка

#list #algorithm #haskell #combinations

#Список #алгоритм #haskell #комбинации

Вопрос:

Итак, мне удалось получить все возможные комбинации из списка, используя понимание списка:

 reorganize :: String -> Int -> Int -> [String]
reorganize _ _ 0 = []
reorganize y 1 _ = [y]
reorganize (a:as) len xs = map (x -> a : x) (reorganize as (len-1) (len-1))
                          reorganize (as    [a]) len (xs-1)

permute :: String -> [String]
permute x = reorganize x len len
          where len = myLength x
 

Тем не менее, я хотел бы знать, как это сделать без использования понимания списка.

Комментарии:

1. Кстати, функция «myLength» — это всего лишь функция, идентичная обычной функции длины, мне просто пришлось реализовать ее самостоятельно в этом упражнении.

2. Вы не используете понимание списка.

3. @WillemVanOnsem в 4-й строке «( x -> a: x)» не является пониманием списка?

4. нет, понимание списка — это что-то вроде [f x | x <- xs] : wiki.haskell.org/List_comprehension

5. x -> a : x является лямбда-выражением .