Одну из задачек решил, но рекомендуемый способ решения был другой. Вопрос является ли решение читаемым или просто мой процедурный мозг пока воспринимает это как сложночитаемое и со временем такое легче понимать?
Суть сделать все возможные перестановки в списке при условии что значения уникальные и Eq интерфейс юзать нельзя для бОльшей полиморфности.
Типа: perms [1,2,3] -> [[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]
perms :: [a] -> [[a]]
perms [] = [[]]
perms [x] = [[x]]
perms (x:xs) = concatMap (insertElem x) (perms xs) where
insertElem x [] = [[x]]
insertElem x yss@(y:ys) = (x:yss) : map (y:) (insertElem x ys)
https://pastebin.com/yDhCc7sN
я выше написал свой вариант. А что советуют?
Я делал +- так же
Обсуждают сегодня