|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.05.2008, 14:10 | #1 |
Новичок
Джуниор
Регистрация: 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). % из третьего во второй Реализовывал с помощью орграфа. Выводит только конечный результат, а не весь маршрут. Толи со списком проблема какая, толи еще что-то... Не могу понять, в чем проблема. Можете что-нибудь подсказать? |
30.05.2008, 15:36 | #2 |
Новичок
Джуниор
Регистрация: 27.05.2008
Сообщений: 2
|
Задачу решил.
Закрыто. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |