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