2013-04-12 4 views
1

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

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

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

например, замена 2 3 (1,3, [2,4], 5, [7,12, [14]]) ==> (1,3,5, [2,4], [7,12, [14]])

+0

Не могли бы вы разместить ожидаемый результат для вашего примера? Я не уверен, правильно ли я понял вопрос. – Adrian

ответ

2

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

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

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

1

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

+0

В самом деле, внутри кортежа есть '[7,12, [14]]', что невозможно, если в сфере не существует какого-то сумасшедшего экземпляра 'Num' или' IsList'. –

Смежные вопросы