私は現在、Prologで解決したい次の問題を抱えています。これは簡単な例であり、Java /C/その他で簡単に解決できます。私の問題は、Javaの考え方に縛られすぎて、Prologの論理力を利用する方法で実際に問題を定式化できないと信じていることです。
問題は..
左または右を指す6つの矢印のセットがあります。それらが次の開始構成にあると仮定しましょう。
->
<-
->
<-
->
<-
これで、2つの矢印が隣り合っている限り、それらを切り替えることができます。私の目標は、どの一連のアクションによって矢印の初期構成が次のようになるかを発見することです。
<-
<-
<-
->
->
->
問題を定式化する私の最初の試みは..
right(arrow_a).
left(arrow_b).
right(arrow_c).
left(arrow_d).
right(arrow_e).
left(arrow_f).
atPosition(1, arrow_a).
atPosition(2, arrow_b).
atPosition(3, arrow_c).
atPosition(4, arrow_d).
atPosition(5, arrow_e).
atPosition(6, arrow_f).
これは、矢印の初期構成が何であるかをPrologに伝えます。しかし、どうすれば追加のロジックを挿入できますか?たとえば、どのように実装しswitchArrows(Index)
ますか?Prologでこのような初期条件を述べるのは正しいですか?後で、たとえばarrow_a
位置6に設定しようとすると、干渉しませんatPosition(6, arrow_a)
か?