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 | ... | ... |