Итак, я новичок в haskell, и я играл с ним некоторое время. Я хочу получить свою функцию, которая выводит все перестановки списков для работы. Я написал 2 реализации, один работает хорошо, другой дает мне ошибку. Любая помощь была бы потрясающей.список перестановок в haskell
Это первая (работа) реализация:
permute [] = [[]]
permute xs = [y| x <- xs, y <- map (x:) $ permute $ delete x xs]
Это один дает мне ошибку:
permute [] = [[]]
permute xs = map (\x -> map (x:) $ permute $ delete x xs) xs
и вот сообщение об ошибке:
Occurs check: cannot construct the infinite type: t0 = [t0]
Expected type: [t0]
Actual type: [[t0]]
In the expression: map (x :) $ permute $ delete x xs
In the first argument of `map', namely
`(\ x -> map (x :) $ permute $ delete x xs)'
Я Если бы кто-то мог объяснить, почему я получаю эту ошибку. Спасибо
Обратите внимание, что этот подход с 'delete' довольно неэффективен. – leftaroundabout
Спасибо за головы, я планирую проверить реализацию в Data.List – turingcomplete