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