Files
mgmt/lang/interpret_test/TestAstFunc2/stmtfor35.txtar
James Shubin cf7e73bbf6 lang: Add a for loop statement for iterating over a list
This adds a for statement which is used to iterate over a list with a
body of statements. This is an important data transformation tool which
should be used sparingly, but is important to have.

An import statement inside of a for loop is not currently supported. We
have a simple hack to detect the obvious cases, but more deeply nested
scenarios probably won't be caught, and you'll get an obscure error
message if you try to do this.

This was incredibly challenging to get right, and it's all thanks to Sam
for his brilliance.

Co-authored-by: Samuel Gélineau <gelisam@gmail.com>
2025-03-08 17:45:29 -05:00

33 lines
659 B
Plaintext

-- main.mcl --
import "fmt"
$list1 = ["a", "b", "c",]
$list2 = ["x", "y", "z",]
$word = "hello"
class foo($x, $y) {
$result = "hello " + $x + $y
}
for $index1, $value1 in $list1 {
for $index2, $value2 in $list2 {
include foo($value1, $value2) as included
$s = fmt.printf("%s is {%d,%d}", $included.result, $index1, $index2)
test [$s,] {}
}
}
-- OUTPUT --
Vertex: test[hello ax is {0,0}]
Vertex: test[hello ay is {0,1}]
Vertex: test[hello az is {0,2}]
Vertex: test[hello bx is {1,0}]
Vertex: test[hello by is {1,1}]
Vertex: test[hello bz is {1,2}]
Vertex: test[hello cx is {2,0}]
Vertex: test[hello cy is {2,1}]
Vertex: test[hello cz is {2,2}]