diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-09-11 22:28:43 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-09-11 22:28:43 -0400 |
| commit | 3443edf760bd4d53aafb2079f7ab67d98ee5013e (patch) | |
| tree | ec7d77db2a266d27cfb19ad30f4892e84ed2593b /test | |
| parent | f7ff82913fccde369fcbc666100570e7cad066db (diff) | |
Use optionals for iterators
Diffstat (limited to 'test')
| -rw-r--r-- | test/iterators.tm | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/test/iterators.tm b/test/iterators.tm index 0a2d2818..6893c595 100644 --- a/test/iterators.tm +++ b/test/iterators.tm @@ -1,33 +1,33 @@ -enum PairIteration(Done, Next(x:Text, y:Text)) -func pairwise(strs:[Text])->func()->PairIteration: +struct Pair(x:Text, y:Text) + +func pairwise(strs:[Text])->func()->Pair?: i := 1 return func(): - if i + 1 > strs.length: return PairIteration.Done + if i + 1 > strs.length: return !Pair i += 1 - return PairIteration.Next(strs[i-1], strs[i]) + return Pair(strs[i-1], strs[i])? -enum RangeIteration(Done, Next(i:Int)) -func range(first:Int, last:Int)->func()->RangeIteration: +func range(first:Int, last:Int)->func()->Int?: i := first return func(): if i > last: - return RangeIteration.Done + return !Int i += 1 - return RangeIteration.Next(i-1) + return (i-1)? func main(): values := ["A", "B", "C", "D"] - >> ((++) "($(foo)$(baz))" for foo, baz in pairwise(values)) + >> ((++) "($(foo.x)$(foo.y))" for foo in pairwise(values)) = "(AB)(BC)(CD)" - >> ["$(foo)$(baz)" for foo, baz in pairwise(values)] + >> ["$(foo.x)$(foo.y)" for foo in pairwise(values)] = ["AB", "BC", "CD"] do: result := [:Text] - for foo, baz in pairwise(values): - result:insert("$(foo)$(baz)") + for foo in pairwise(values): + result:insert("$(foo.x)$(foo.y)") >> result = ["AB", "BC", "CD"] |
