gugamilare wrote:This is not going to work because it modifies literal data.
This might be true but it shouldn't. It's almost never a good idea to operate destructively on a list structure except maybe for avoiding excessive consing while building it. Its good practice to assume that you cannot operate on a list structure destructively unless the documentation of the function returning it does explicitly state it returns fresh conses. Otherwise you couldn't use liteal lists at all.
By rewriting do-board to return a fresh structure you actually recommend to write code around a bad programming style which is a very bad idea imo. If the OP plans to operate on the board destructively he'd be better off with arrays. But since this wasn't the OP's question I didn't recommend it. And if he runs into trouble with his "list board" then it's actually a good thing because he has to learn not to operate on lists destructively anyway.