Range expansion: Difference between revisions
Rename Perl 6 -> Raku, alphabetize, minor clean-up
No edit summary |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 95:
[-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20]
</pre>
=={{header|Ada}}==
The function Expand takes a string and returns a corresponding array of integers.
Line 387 ⟶ 388:
-6,-3,-2,-1,3,4,5,7,8,9,10,11,14,15,17,18,19,20
</pre>
=={{header|AppleScript}}==
Line 1,964:
{{out}}
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
=={{header|Liberty BASIC}}==
Line 2,671 ⟶ 2,670:
eval $range;
}</lang>
=={{header|Perl 6}}==▼
{{works with|Rakudo|2016.07}}▼
<lang Perl6>sub range-expand (Str $range-description) {▼
my token number { '-'? \d+ }▼
my token range { (<&number>) '-' (<&number>) }▼
$range-description▼
.split(',')▼
.map({ .match(&range) ?? $0..$1 !! +$_ })▼
.flat▼
}▼
say range-expand('-6,-3--1,3-5,7-11,14,15,17-20').join(', ');</lang>▼
{{out}}▼
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>▼
<br>▼
Alternatively, using a grammar:▼
<lang perl6>grammar RangeList {▼
token TOP { <term>* % ',' { make $<term>.map(*.made) } }▼
token term { [<range>|<num>] { make ($<num> // $<range>).made } }▼
token range { <num> '-' <num> { make +$<num>[0] .. +$<num>[1] } }▼
token num { '-'? \d+ { make +$/ } }▼
}▼
say RangeList.parse('-6,-3--1,3-5,7-11,14,15,17-20').made.flat.join(', ');</lang>▼
{{out}}▼
<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>▼
=={{header|Phix}}==
Line 3,336 ⟶ 3,302:
'(1 2 30.0 31.0 32.0)
</pre>
(formerly Perl 6)
▲{{works with|Rakudo|2016.07}}
▲ my token number { '-'? \d+ }
▲ my token range { (<&number>) '-' (<&number>) }
▲ $range-description
▲ .split(',')
▲ .map({ .match(&range) ?? $0..$1 !! +$_ })
▲ .flat
▲}
▲say range-expand('-6,-3--1,3-5,7-11,14,15,17-20').join(', ');</lang>
▲{{out}}
▲<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
▲<br>
▲Alternatively, using a grammar:
▲<lang perl6>grammar RangeList {
▲ token TOP { <term>* % ',' { make $<term>.map(*.made) } }
▲ token term { [<range>|<num>] { make ($<num> // $<range>).made } }
▲ token range { <num> '-' <num> { make +$<num>[0] .. +$<num>[1] } }
▲ token num { '-'? \d+ { make +$/ } }
▲}
▲say RangeList.parse('-6,-3--1,3-5,7-11,14,15,17-20').made.flat.join(', ');</lang>
▲{{out}}
▲<pre>-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20</pre>
=={{header|Raven}}==
|