mirror of
https://github.com/stedolan/jq.git
synced 2024-05-11 05:55:39 +00:00
Add while(cond; update)
(fix #314)
This commit is contained in:
@ -958,6 +958,11 @@ static const char* const jq_builtins[] = {
|
||||
" def _range: "
|
||||
" if (by > 0 and . < upto) or (by < 0 and . > upto) then ., ((.+by)|_range) else . end; "
|
||||
" if by == 0 then init else init|_range end | select((by > 0 and . < upto) or (by < 0 and . > upto));",
|
||||
// generic iterator/generator
|
||||
"def while(cond; update): "
|
||||
" def _while: "
|
||||
" if cond then ., (update | _while) else empty end; "
|
||||
" _while;",
|
||||
};
|
||||
#undef LIBM_DD
|
||||
|
||||
|
@ -1241,6 +1241,21 @@ sections:
|
||||
input: '["a","b,c,d","e"]'
|
||||
output: ['"a, b,c,d, e"']
|
||||
|
||||
- title: "`while(cond; update)`"
|
||||
body: |
|
||||
|
||||
The `while(cond; update)` function allows you to repeatedly
|
||||
apply an update to `.` until `cond` is false.
|
||||
|
||||
Note that `while(cond; update)` is internally defined as a jq
|
||||
function written in jq, using only functional constructs. See
|
||||
advanced topics below.
|
||||
|
||||
examples:
|
||||
- program: '[while(.<100; .*2)]'
|
||||
input: '1'
|
||||
output: ['[1,2,4,8,16,32,64]']
|
||||
|
||||
|
||||
- title: "`recurse(f)`, `recurse`, `recurse_down`"
|
||||
body: |
|
||||
@ -1759,6 +1774,13 @@ sections:
|
||||
range(0; 10; 3)'
|
||||
input: 'null'
|
||||
output: ['0,3,6,9']
|
||||
- program: 'def while(cond; update):
|
||||
def _while:
|
||||
if cond then ., (update | _while) else empty end;
|
||||
_while;
|
||||
[while(.<100; .*2)]'
|
||||
input: '1'
|
||||
output: ['[1,2,4,8,16,32,64]']
|
||||
|
||||
- title: Assignment
|
||||
body: |
|
||||
|
@ -218,6 +218,10 @@ null
|
||||
null
|
||||
[0,-1,-2,-3,-4]
|
||||
|
||||
[while(.<100; .*2)]
|
||||
1
|
||||
[1,2,4,8,16,32,64]
|
||||
|
||||
#
|
||||
# Slices
|
||||
#
|
||||
|
Reference in New Issue
Block a user