Browse thread
to merge list of lists
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2007-03-05 (06:06) |
From: | Pietro Abate <Pietro.Abate@a...> |
Subject: | to merge list of lists |
Hi all, I want to write a small function to merge a list of lists mergel [] [[1;2;3];[4;5;6];[7;8;9]];; - : int list list = [[1; 4; 7]; [2; 5; 8]; [3; 6; 9]] I've written it down, but to me, it looks overly complicated : let rec mergel acc ll = let rec aux (al,all) = function [] -> (List.rev al,List.rev all) | [] :: tl -> aux (al,all) tl | (h :: l) :: tl -> aux ((h::al),(l::all)) tl in match aux ([],[]) ll with |([],[]) -> List.rev acc |(l,[]) -> l::acc |(l,tl) -> mergel (l::acc) tl ;; Since my goal is to write it lazily, I'm wondering if there is a way of re-write the same function just by using list primitives (map, flatten, ...). (?) I always feel that when solving these kind of problems I miss some greater truth ... for example, by using list comprehensions it's easy to generalize a class of combinatorial problems. Is there a similar notion I can use in this case ? Any hints ? :) p -- ++ Blog: http://blog.rsise.anu.edu.au/?q=pietro ++ ++ "All great truths begin as blasphemies." -George Bernard Shaw ++ Please avoid sending me Word or PowerPoint attachments. See http://www.fsf.org/philosophy/no-word-attachments.html