
On Jul 13, 2010, at 9:00 PM, Christopher Done wrote:
On 13 July 2010 10:58, vadali
wrote:\ i want to define a function which takes as a parameter a list which can contain other lists, eg. [1,[2,3],[4,[5,6]]]
What would the type of a list like that be? What you _can_ do is data List_Or t = Item t | List [List_Or t] deriving (Eq, Ord, Show) and have a "list" like ell :: List_Or Int ell = List [Item 1, List [Item 2, Item 3], List [Item 4, List [Item 5, Item 6]]]
how would i define a function that can iterate through the items so (in this example) iter1 = 1 iter2 = [2,3] iter3 = [4,[5,6]]
Then you can write functions like iter n (List x) = head (drop (n-1) x) with examples *Main> iter 1 ell Item 1 *Main> iter 2 ell List [Item 2,Item 3] *Main> iter 3 ell List [Item 4,List [Item 5,Item 6]]
( can i do that without using the Tree data type? )
This basically _is_ a tree data type, even if not THE Tree data type. That's because nested lists are trees.