#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_comprehension5.
x -> a : x
является лямбда-выражением .