diff --git a/src/experimental/note.md b/src/experimental/note.md index dc13b94b..9f522d97 100644 --- a/src/experimental/note.md +++ b/src/experimental/note.md @@ -6,4 +6,8 @@ dotSCAD 3.0 Dev - `util/sort`: `by` accepts a function literal. - `util/bsearch`: only supports `sorted` and `target` parameters. I view it as a new function. -- `util/dedup`: add the `eq` parameter. \ No newline at end of file +- `util/dedup`: add the `eq` parameter. + +New modules/functions + +- `some` \ No newline at end of file diff --git a/src/util/_impl/_dedup_impl.scad b/src/util/_impl/_dedup_impl.scad index 425ba329..35c35d89 100644 --- a/src/util/_impl/_dedup_impl.scad +++ b/src/util/_impl/_dedup_impl.scad @@ -1,3 +1,5 @@ +use <../some.scad> ; + function _dedup_sorted(lt, leng, eq) = leng == 0 ? lt : is_function(eq) ? @@ -10,12 +12,6 @@ function _dedup_sorted(lt, leng, eq) = [for(i = [1:leng - 1]) if(lt[i] != lt[i - 1]) lt[i]] ); -function _some(dest, assert_func, leng, i = 0) = - i == leng ? false : - assert_func(dest[i]) ? true : _some(dest, assert_func, leng, i + 1); - -function some(dest, assert_func) = _some(dest, assert_func, len(dest)); - function _dedup_vt(src, dest, leng, i = 0) = i == leng ? dest : // src[i] in dest ? diff --git a/src/util/some.scad b/src/util/some.scad new file mode 100644 index 00000000..75d6e437 --- /dev/null +++ b/src/util/some.scad @@ -0,0 +1,5 @@ +function _some(dest, assert_func, leng, i = 0) = + i == leng ? false : + assert_func(dest[i]) ? true : _some(dest, assert_func, leng, i + 1); + +function some(dest, assert_func) = _some(dest, assert_func, len(dest)); \ No newline at end of file