1

对于家庭作业,我必须(除其他外)在 Oz 中创建一个棋盘。

我对这种语言相当陌生,但我想这样做:

declare
fun {MakeTile Col Row}
   if Col==1 then
      if {And (Row=<10) (Row>=2)} then N in
     N = {MakeTile 1 Row+1}|{MakeTile 1 Row-1}|{MakeTile 2 Row}|{MakeTile 2 Row-1}
     tile(column:Col row:Row player:0 neighbours:N)
      else
     if Row==11 then N in
        N = {MakeTile 1 Row-1}|{MakeTile 2 Row-1}|{MakeTile 2 Row}
        tile(column:Col row:Row player:0 neighbours:N)
     else N in % Row==1
        N = {MakeTile 1 Row+1}|{MakeTile 2 Row}
        tile(column:Col row:Row player:0 neighbours:N)
     end
      end
   else
      tile(column:Col row:Row player:0 neighbours:nil)
       % TODO: Handle other edge of the board
   end
end
{Browse {MakeTile 'A' 1}}

该程序只是继续运行。

我们必须以声明式的方式进行编程。我不习惯这些语言,递归方法是创建这种板的好方法吗?

4

1 回答 1

0

声明性方法可能是正确的方法。我测试了您的代码并适用于您编写的内容,它只是tile(column:'A' neighbours:nil player:0 row:1)按预期打印。一直打不开,你有什么问题吗?

于 2015-03-10T14:12:19.720 回答