Имея следующую функцию:Рекурсивный вызов внутри карты
between :: a -> [a] -> [[a]]
between i [] = [[i]]
between i [email protected](x:xs) = [[i]++r] ++ map f (between i xs)
where f = (\n->[x] ++ n)
И результат between 0 [1,2]
существа:
[[0,1,2],[1,0,2],[1,2,0]]
Как это возможно? Я могу понять первые два случая:
[0,1,2]
из[[0]++[1,2]]
[1,0,2]
потомуmap f [[0]++[2]]
(где х 1)
ли карта рекурсии, а? И сохраняя ссылку на все начальные x
, значит, тогда просто все контакты? В моей голове конечный результат будет что-то вроде:
[[0,1,2],[1,0,2],[2,0]]
PS: С «карта рекурсии», а что-то долго линии:
\n -> [1] + n
\n ->[2] + n
\n ->[3] + n
\n ->[m] + n
Карта применяется ко всему результату рекурсии, которая является '[[0,2], [2,0]]'. – user2407038
Замечание: '[i] ++ r' можно упростить до' i: r'. – Jubobs