From 3443edf760bd4d53aafb2079f7ab67d98ee5013e Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 11 Sep 2024 22:28:43 -0400 Subject: Use optionals for iterators --- test/iterators.tm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'test') 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"] -- cgit v1.2.3