V10/cmd/icon/tests/queens.icn
procedure main()
every bwrite([q(1),q(2),q(3),q(4),q(5),q(6),q(7),q(8)])
end
procedure q(c)
suspend place(1 to 8,c) # look for a row
end
procedure place(r,c)
static up, down, row
initial {
up := list(15,0)
down := list(15,0)
row := list(8,0)
}
if row[r] = down[r + c - 1] = up[8 + r - c] = 0
then suspend row[r] <- down[r + c - 1] <-
up[8 + r - c] <- r # place if free
end
procedure bwrite(s)
local i,l
every r := 1 to 8 do {
l := repl(" .",8)
s[i:=(1 to 8)] = r & l[2*i] := "Q"
write (l)
}
write("ok?")
end