Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2008, 14:10   #1
VIP52
Новичок
Джуниор
 
Регистрация: 27.05.2008
Сообщений: 2
Восклицание Кубики. Visual Prolog.

Здравствуйте.
Совсем недавно начал работать с языком Prolog. Пока не совсем разобрался. Требуется ваша помощь.

Задание

Имеется четыре пронумерованных кубика. На столе есть три места, на которые можно положить один или несколько кубиков в столбик. Можно брать кубик со стола или верхний кубик в столбике, а помещать на разрешённое место на столе или на верхний кубик в столбике.
На одном из разрешённых мест находится столбик кубиков 1234 (кубик с номером один сверху). Требуется переложить кубики на любое разрешённое место так, чтобы их номера образовывали интерактивно задаваемую последовательность.

Моя программа

DOMAINS

d_v = v(string,string,string)
list = d_v*

PREDICATES

nondeterm duga(d_v, d_v)
nondeterm path(d_v What, list, d_v End_vert)

nondeterm begin(d_v, d_v)
nondeterm member(d_v, list)
out_list(list) % вывод на экран элементов списка.

GOAL

write("Место 1 (начало):"), readln(X),
write("Место 2 (начало):"), readln(Y),
write("Место 3 (начало):"), readln(Z),
write("Место 1 (конец):"), readln(X1),
write("Место 2 (конец):"), readln(Y1),
write("Место 3 (конец):"), readln(Z1),
begin(v(X,Y,Z), v(X1,Y1,Z1)).

CLAUSES

begin(v(X,Y,Z), v(X1,Y1,Z1)) :- path(v(X,Y,Z), [v(X1,Y1,Z1)], v(X1,Y1,Z1)).

path(v(X,Y,Z), Was, v(X1,Y1,Z1)) :- write("Путь: "), out_list(Was).

path(v(X,Y,Z), Was, v(X1,Y1,Z1)) :-
duga(v(X,Y,Z), v(X1,Y1,Z1)),
not(member(v(X1,Y1,Z1), Was)),
path(v(X1,Y1,Z1), [v(X1,Y1,Z1)|Was], v(X1,Y1,Z1)).

out_list([v(H,L,N)|T]) :- out_list(T), nl, write("( ",H,", ",L,", ",N," )").
out_list([ ]).
member(H, [H|_]).
member(H, [_|T]) :- member(H,T).

duga(v(X,Y,Z),v(X1,Y1,Z)):-X<>"",frontstr(1,X,A,Res),X1=Res,co ncat(A,Y,Y1).
% из первого во второй

duga(v(X,Y,Z),v(X1,Y,Z1)):-X<>"",frontstr(1,X,A,Res),X1=Res,co ncat(A,Z,Z1).
% из первого в третий

duga(v(X,Y,Z),v(X1,Y1,Z)):-Y<>"",frontstr(1,Y,B,Res),Y1=Res,co ncat(B,X,X1).
% из второго в первый

duga(v(X,Y,Z),v(X,Y1,Z1)):-Y<>"",frontstr(1,Y,B,Res),Y1=Res,co ncat(B,Z,Z1).
% из второго в третий

duga(v(X,Y,Z),v(X1,Y,Z1)):-Z<>"",frontstr(1,Z,C,Res),Z1=Res,co ncat(C,X,X1).
% из третьего в первый

duga(v(X,Y,Z),v(X,Y1,Z1)):-Z<>"",frontstr(1,Z,C,Res),Z1=Res,co ncat(C,Y,Y1).
% из третьего во второй



Реализовывал с помощью орграфа.
Выводит только конечный результат, а не весь маршрут. Толи со списком проблема какая, толи еще что-то... Не могу понять, в чем проблема.

Можете что-нибудь подсказать?
VIP52 вне форума Ответить с цитированием
Старый 30.05.2008, 15:36   #2
VIP52
Новичок
Джуниор
 
Регистрация: 27.05.2008
Сообщений: 2
По умолчанию

Задачу решил.

Закрыто.
VIP52 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog Zeraim Общие вопросы Delphi 1 14.05.2008 18:01
Prolog 301 Помощь студентам 10 27.03.2008 20:43
Помогите студенту МГКИТ задача про кубики plexter Паскаль, Turbo Pascal, PascalABC.NET 2 10.06.2007 16:07
про кубики ара Помощь студентам 1 14.05.2007 07:29