34 lines
653 B
Text
34 lines
653 B
Text
:- module flatten_a_list.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module list.
|
|
|
|
:- type tree(T)
|
|
---> leaf(T)
|
|
; node(list(tree(T))).
|
|
|
|
:- func flatten(tree(T)) = list(T).
|
|
|
|
flatten(leaf(X)) = [X].
|
|
flatten(node(Xs)) = condense(map(flatten, Xs)).
|
|
|
|
main(!IO) :-
|
|
List = node([
|
|
node([leaf(1)]),
|
|
leaf(2),
|
|
node([node([leaf(3), leaf(4)]), leaf(5)]),
|
|
node([node([node([])])]),
|
|
node([node([node([leaf(6)])])]),
|
|
leaf(7),
|
|
leaf(8),
|
|
node([])
|
|
]),
|
|
io.print_line(flatten(List), !IO).
|
|
|
|
:- end_module flatten_a_list.
|