поменять местами вложенный список в haskell

Я хочу поменять местами список, например (1,3,[2,4],5,[7,12,[14]])

Я знаю, что в haskell типы списка должны быть одинаковыми, поэтому я запутался, как я могу это сделать.

Должен ли я использовать другую структуру данных? или я должен определить другой тип данных?

например поменять местами 2 3 (1,3,[2,4],5,[7,12,[14]]) ==> (1,3,5,[2,4],[7,12,[ 14]])


person Kibo    schedule 12.04.2013    source источник
comment
Не могли бы вы опубликовать ожидаемый результат для вашего примера? Я не уверен, правильно ли я понимаю вопрос.   -  person Adrian    schedule 12.04.2013


Ответы (2)


На самом деле такие списки невозможны, и это действительно дерево, на которое вы смотрите, например, что-то вроде этого.

data NestedList a = Leaf a | Node [NestedList a]

Теперь вам нужно подумать, что вы на самом деле подразумеваете под swap. Вы можете поменять местами списки верхнего уровня, вы можете поменять местами листья и...

person Bryan Olivier    schedule 12.04.2013

В вашем случае это не список, а кортеж. Кортежи — это неоднородные контейнеры, поэтому внутри них могут находиться разные типы. Однако замену элементов в кортеже невозможно записать в общем виде, по крайней мере, на стандартном Haskell. Я предлагаю оперировать данными, указанными Брайаном.

person Adrian    schedule 12.04.2013
comment
Ну, на самом деле внутри кортежа есть [7,12,[14]], что невозможно, если в области видимости нет какого-то сумасшедшего экземпляра Num или IsList. - person Niklas B.; 13.04.2013