From 7fd9e86ea694bcfc3cb8472d43c93626febd45cd Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Tue, 6 Mar 2018 13:55:16 -0600 Subject: Make limit/2 more efficient Contributed by @pkoppstein. --- src/builtin.jq | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/builtin.jq b/src/builtin.jq index c445f1a2..e65a8997 100644 --- a/src/builtin.jq +++ b/src/builtin.jq @@ -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); -- cgit v1.2.3