Make limit/2 more efficient
Contributed by @pkoppstein.
This commit is contained in:
1 parent
e113c67d51
commit
7fd9e86ea6
1 file changed
+3
-7
+3
-7
@@ -168,13 +168,9 @@ def until(cond; next):
|
||||
if cond then . else (next|_until) end;
|
||||
_until;
|
||||
def limit($n; exp):
|
||||
if $n < 0 then exp else
|
||||
label $out |
|
||||
foreach exp as $item (
|
||||
[$n, null];
|
||||
if .[0] < 1 then break $out
|
||||
else [.[0] -1, $item] end;
|
||||
if .[0] == 0 then .[1], break $out else .[1] end) end;
|
||||
if $n < 0 then exp
|
||||
else label $out | foreach exp as $item ($n; .-1; $item, if . <= 0 then break $out else empty end)
|
||||
end;
|
||||
def isempty(g): 0 == ((label $go | g | (1, break $go)) // 0);
|
||||
def first(g): label $out | g | ., break $out;
|
||||
def last(g): reduce g as $item (null; $item);
|
||||
|
||||
Reference in new issue
Block a user