Переместить кубы из положения А в положение В в Прологе - PullRequest
1 голос
/ 12 сентября 2011

У меня следующая проблема: на столе есть несколько башен с кубиками.

       a 
       b d
       c e
------------------- <- table

Теперь я хочу переместить кубы в другую ситуацию, например, такую:

        c e
      a b d
------------------- 

Программа Prolog должна распечатать шаги, чтобы добраться до этой ситуации, например: move cube a onto the table и так далее. У меня первая ситуация, представленная в Прологе:

clean(t). % t is the table, you can always put things there
clean(X) :- \+ on(_,X). % X is the top element, if there is nothing above it

on(a,b). % a is on b
on(b,c). % b on c
on(d,e). % d on e
on(c,t). % c on the table
on(e,t). % and e on the table

Теперь моя проблема состоит в том, чтобы найти решение, которое заставит Prolog напечатать шаги к новой ситуации. Моя первая проблема, как сказать Прологу, как выглядит новая ситуация. Я пробовал это с некоторыми списками, но до сих пор не получилось.

У кого-нибудь есть идеи, как это решить?

1 Ответ

1 голос
/ 12 сентября 2011

Если вы кодируете состояние проблемы, имея в своей базе данных факты предиката on/2, то вы можете изменить это состояние только с помощью assert и retract для изменения базы данных (и ваши предикаты, вероятно, должны быть объявлено dynamic также). Это громоздко. Лучшее решение - передать состояние проблемы в качестве параметра для ваших предикатов решения (и, возможно, скрыть эту структуру за предикатом оболочки). Это работает намного лучше с возвратом, который вам, вероятно, понадобится для поиска решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...