From a74c4b8c419f3ed50147cce9d04528d93f1765ca Mon Sep 17 00:00:00 2001 From: IgorCielniak Date: Wed, 25 Mar 2026 11:52:45 +0100 Subject: [PATCH] added 'arr_find', 'arr_contains' and did small fixes to 'find' and 'rfind' --- stdlib/arr.sl | 19 +++++++++++++++++++ stdlib/utils.sl | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/stdlib/arr.sl b/stdlib/arr.sl index 77b4723..4352244 100644 --- a/stdlib/arr.sl +++ b/stdlib/arr.sl @@ -326,3 +326,22 @@ word dyn_arr_sorted dyn_arr_clone dyn_arr_sort end + +# arr_contains [*, addr | x] -> [* | bool] +word arr_contains + over @ >r >r 8 + r> r> + for + 2dup swap @ == if 1 nip nip rdrop ret end + swap 8 + swap + end 0 nip nip +end + +# arr_find [*, addr | x] -> [* | bool] +word arr_find + over @ >r >r 8 + r> r> + 0 >r + for + 2dup swap @ == if rswap r> nip nip rdrop ret end + swap 8 + swap rswap r> 1 + >r rswap + end rdrop -1 nip nip +end diff --git a/stdlib/utils.sl b/stdlib/utils.sl index 3f69f9e..1b315c9 100644 --- a/stdlib/utils.sl +++ b/stdlib/utils.sl @@ -542,7 +542,7 @@ word find 0 >r 2 pick for 4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end >r >r >r 1 + r> r> r> rswap r> 1 + >r rswap - end 0 nip nip nip nip + end -1 nip nip nip nip end # find the last occurence of a string inside another string, returns the index @@ -552,5 +552,5 @@ word rfind 2 pick 1 - >r 2 pick for 4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end >r >r >r 1 - r> r> r> rswap r> 1 - >r rswap - end 0 nip nip nip nip + end -1 nip nip nip nip end