From cc9bcc6e9d376706ebe8110cc78825b151e8d29d Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Thu, 19 Mar 2020 20:32:09 +0800 Subject: [PATCH] refactor to zip --- src/experimental/_impl/_zip_impl.scad | 11 +++++++++++ src/experimental/zip.scad | 5 +++++ src/experimental/zip2.scad | 2 -- src/experimental/zip3.scad | 2 -- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 src/experimental/_impl/_zip_impl.scad create mode 100644 src/experimental/zip.scad delete mode 100644 src/experimental/zip2.scad delete mode 100644 src/experimental/zip3.scad diff --git a/src/experimental/_impl/_zip_impl.scad b/src/experimental/_impl/_zip_impl.scad new file mode 100644 index 00000000..ddc115c3 --- /dev/null +++ b/src/experimental/_impl/_zip_impl.scad @@ -0,0 +1,11 @@ +function _zip2(lt1, lt2) = + [for(i = [0:len(lt1) - 1]) [lt1[i], lt2[i]]]; + +function _zip3(lt1, lt2, lt3) = + [for(i = [0:len(lt1) - 1]) [lt1[i], lt2[i], lt3[i]]]; + +function _zipAll_sub(lists, list_to, elem_to, i = 0) = + i > elem_to ? [] : + concat([[for(j = [0:list_to]) lists[j][i]]], _zipAll_sub(lists, list_to, elem_to, i + 1)); + +function _zipAll(lists) = _zipAll_sub(lists, len(lists) - 1, len(lists[0]) - 1); \ No newline at end of file diff --git a/src/experimental/zip.scad b/src/experimental/zip.scad new file mode 100644 index 00000000..5096f063 --- /dev/null +++ b/src/experimental/zip.scad @@ -0,0 +1,5 @@ +use ; + +function zip(lt, lt2, lt3) = + is_undef(lt2) ? _zipAll(lt) : + is_undef(lt3) ? _zip2(lt, lt2) : _zip3(lt, lt2, lt3); \ No newline at end of file diff --git a/src/experimental/zip2.scad b/src/experimental/zip2.scad deleted file mode 100644 index 32820077..00000000 --- a/src/experimental/zip2.scad +++ /dev/null @@ -1,2 +0,0 @@ -function zip2(lt1, lt2) = - [for(i = [0:len(lt1) - 1]) [lt1[i], lt2[i]]]; \ No newline at end of file diff --git a/src/experimental/zip3.scad b/src/experimental/zip3.scad deleted file mode 100644 index 6ce8a41e..00000000 --- a/src/experimental/zip3.scad +++ /dev/null @@ -1,2 +0,0 @@ -function zip3(lt1, lt2, lt3) = - [for(i = [0:len(lt1) - 1]) [lt1[i], lt2[i]. lt3[i]]]; \ No newline at end of file