1

私はこのプロローグ述語に苦しんでいます: board(Before,_,After).

は、'a'、'b'、'c'、または 'd' のいずれかの文字のリストのリストBeforeです (リスト内のリストの長さは同じです)。例えば:

[[c,c,c,c,c],[a,a,a,a,c],[a,b,b,a,c],[b,d,b,a,c],[d,b,b,a,c]]

After を取得するには、まず Before を次のように表します。

  ccccc
  aaaac
  abbac
  bdbac
  dbbac

実はこれが囲碁の盤面です(この場合は5×5)。「c」と「d」は空きスペースです。'a' は白い石で、'b' は黒い石です。'c' と 'd' は常に 'rr' にマップしてください。生きている場合は「a」を「ar」に、死んでいる場合は「ad」にマッピングします。「b」についても同様です。この場合、

?- board([[c,c,c,c,c],[a,a,a,a,c],[a,b,b,a,c],[b,d,b,a,c],[d,b,b,a,c]],_,After).
After = [[rr,rr,rr,rr,rr],[ar,ar,ar,ar,rr],[ar,br,br,ar,rr],[br,rr,br,ar,rr],[rr,br,br,ar,rr]]

実際、この問題を解決するために DFS を使用しようとしましたが、失敗しました。Prolog と Go のいくつかの基本的なルールを知っている人は、この述語を実装できますか? どうもありがとう!

4

0 に答える 0