Skip to content

Commit 6e29ddd

Browse files
authored
Merge pull request #6 from fink-lang/iter
iter
2 parents c54569a + 0b4ab4b commit 6e29ddd

File tree

4 files changed

+96
-21
lines changed

4 files changed

+96
-21
lines changed

package-lock.json

Lines changed: 63 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
"devDependencies": {
3131
"@fink/cli": "^6.0.0",
3232
"@fink/jest": "^5.0.0",
33-
"@fink/larix": "^10.0.0",
34-
"@fink/loxia": "^10.0.0",
33+
"@fink/larix": "^10.0.1",
34+
"@fink/loxia": "^10.1.1",
3535
"commitizen": "^4.0.5",
3636
"cz-conventional-changelog": "^3.1.0",
3737
"jest-cli": "^26.0.0",

src/iter.fnk

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,18 @@ unique = fn iterable: new Set iterable
6666

6767
drop = fn num_items: fn items:
6868
pipe items:
69-
map item, idx=0: ([item, idx], idx + 1)
70-
# TODO: should loxia add an accu to filter?
71-
filter [, idx]: idx >= num_items
72-
map [item]: item
69+
filter , idx=0:
70+
(idx >= num_items, idx + 1)
7371

7472

7573
take = fn num_items: fn items:
76-
iter = items.(Symbol.iterator) _
77-
pipe count 0:
78-
while ctr: ctr < num_items
79-
map ctr: iter.next _
80-
while {done}: done == false
81-
map {value}: value
74+
match num_items:
75+
0:
76+
[]
77+
else:
78+
pipe items:
79+
until , ctr=1:
80+
(ctr >= num_items, ctr + 1)
8281

8382

8483
slice = fn start, end=max_int: fn items:
@@ -126,6 +125,9 @@ length = fn iterable:
126125
else: -1
127126

128127

128+
is_empty = 0 == length ?
129+
130+
129131
# TODO: should this live in str?
130132
# TODO: should it be fn iterable, sep?
131133
join = fn sep: fn iterable:

src/iter.test.fnk

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
{
44
repeat, count, enumerate, zip, cycle, chain, reverse, sort, unique, flatten
5-
length, join, for_each, slice, insert_at, take, drop
5+
length, is_empty, join, for_each, slice, insert_at, take, drop
66
} = import './iter'
77

88
{pad_start} = import './str'
@@ -200,6 +200,24 @@ describe 'folding funcs', fn:
200200
to_equal (-1)
201201

202202

203+
it 'checks if iterable is empty', fn:
204+
expect
205+
is_empty ''
206+
to_equal true
207+
208+
expect
209+
is_empty []
210+
to_equal true
211+
212+
expect
213+
is_empty 'foo'
214+
to_equal false
215+
216+
expect
217+
is_empty [1]
218+
to_equal false
219+
220+
203221
it 'joins iterables with a separator', fn:
204222
expect
205223
pipe chain 'abc', 'def':

0 commit comments

Comments
 (0)