Commit 0098b5f8b0efe9d42e883771f6aebdaf924293c1
1 parent
6730102e
maj list
Showing
1 changed file
with
12 additions
and
2 deletions
Show diff stats
anubis_dev/library/tools/list.anubis
... | ... | @@ -825,7 +825,7 @@ public define List($A) unfold($B item, $B -> Result($A, ($A, $B)) unspool) = if |
825 | 825 | *** Zip |
826 | 826 | ================================================================================================================== |
827 | 827 | |
828 | -define Maybe(List(($T,$T))) zip(List($T) lg, List($T) ld, List(($T,$T)) acc) = | |
828 | +define Maybe(List(($T1, $T2))) zip(List($T1) lg, List($T2) ld, List(($T1, $T2)) acc) = | |
829 | 829 | if lg is |
830 | 830 | { |
831 | 831 | [ ] then if ld is [ ] then success(reverse(acc)) else failure, |
... | ... | @@ -835,7 +835,17 @@ define Maybe(List(($T,$T))) zip(List($T) lg, List($T) ld, List(($T,$T)) acc) = |
835 | 835 | }. |
836 | 836 | |
837 | 837 | Zip two lists into a list of tuples. Returns failure if the two lists have different length. |
838 | -public define Maybe(List(($T,$T))) zip(List($T) lg, List($T) ld) = zip(lg, ld, []). | |
838 | +public define Maybe(List(($T1,$T2))) zip(List($T1) lg, List($T2) ld) = zip(lg, ld, []). | |
839 | + | |
840 | + Note: The list is pre-reversed in the public interface. | |
841 | +define (List($T1), List($T2)) unzip(List(($T1, $T2)) list, List($T1) accl, List($T2) accr) = | |
842 | + if list is | |
843 | + { | |
844 | + [ ] then (accl, accr), | |
845 | + [h . t] then unzip(t, [p1(h) . accl], [p2(h) . accr]) | |
846 | + }. | |
847 | + | |
848 | +public define (List($T1), List($T2)) unzip(List(($T1, $T2)) l) = unzip(reverse(l), [], []). | |
839 | 849 | |
840 | 850 | |
841 | 851 | ... | ... |