2024-08-10 11:52:53 -07:00
|
|
|
|
|
|
|
enum PairIteration(Done, Next(x:Text, y:Text))
|
|
|
|
func pairwise(strs:[Text])->func()->PairIteration:
|
|
|
|
i := 1
|
|
|
|
return func():
|
2024-08-18 17:39:57 -07:00
|
|
|
if i + 1 > strs.length: return PairIteration.Done
|
2024-08-10 11:52:53 -07:00
|
|
|
i += 1
|
|
|
|
return PairIteration.Next(strs[i-1], strs[i])
|
|
|
|
|
|
|
|
enum RangeIteration(Done, Next(i:Int))
|
|
|
|
func range(first:Int, last:Int)->func()->RangeIteration:
|
|
|
|
i := first
|
|
|
|
return func():
|
|
|
|
if i > last:
|
|
|
|
return RangeIteration.Done
|
|
|
|
i += 1
|
|
|
|
return RangeIteration.Next(i-1)
|
|
|
|
|
|
|
|
func main():
|
|
|
|
values := ["A", "B", "C", "D"]
|
|
|
|
|
2024-08-18 11:44:15 -07:00
|
|
|
>> ((++) "($(foo)$(baz))" for foo, baz in pairwise(values))
|
2024-08-10 11:52:53 -07:00
|
|
|
= "(AB)(BC)(CD)"
|
2024-08-18 11:44:15 -07:00
|
|
|
>> ["$(foo)$(baz)" for foo, baz in pairwise(values)]
|
2024-08-10 11:52:53 -07:00
|
|
|
= ["AB", "BC", "CD"]
|
|
|
|
|
|
|
|
do:
|
|
|
|
result := [:Text]
|
|
|
|
for foo, baz in pairwise(values):
|
2024-08-18 11:44:15 -07:00
|
|
|
result:insert("$(foo)$(baz)")
|
2024-08-10 11:52:53 -07:00
|
|
|
>> result
|
|
|
|
= ["AB", "BC", "CD"]
|
|
|
|
|
|
|
|
>> [i for i in range(5, 10)]
|
|
|
|
= [5, 6, 7, 8, 9, 10]
|
|
|
|
|
|
|
|
>> (+) range(5, 10)
|
|
|
|
= 45
|