|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.11.2010, 12:43 | #1 |
Регистрация: 22.05.2010
Сообщений: 5
|
Задача планирования «в мире кубиков» Turbo prolog
Имеется 3 кубика, из которых составлены столбики – один или несколько. Максимальное число столбиков ограничено. На каждом шагу разрешается переставлять только один кубик. Кубик можно взять только тогда, когда его верхняя поверхность свободна. Кубик можно поставить либо на стол, либо на другой кубик.
Целевая ситуация – любая конфигурация кубиков, содержащая столбик, составленный из всех имеющихся кубиков в указанном порядке. Задача состоит в выработке плана переупорядочивания кубиков. Собственно задача решена, но у меня появилось маленькое затруднение. Нужно сделать, чобы начальная последовательность кубиков задавалась с клавиатуры Вот мой код domains str,str2=string s=char list,l=s* l2=list* l3=l2* domains str,str2=string s=char list,l=s* l2=list* l3=l2* predicates tgoal(l2) delete(list,l2,l2) member(l2,l3) after(l2,l2) solve(l2,l3) in_depth(l3,l2,l3,l3,integer) write_list(l3) convert(string,list) clauses tgoal([['a','b','c'],[],[]]). tgoal([[],['a','b','c'],[]]). tgoal([[],[],['a','b','c']]). convert("",[]). convert(S1,[H|T]):-frontchar(S1,H,S2),convert(S2,T). after(Stolbs,[Stolb1,[Up1|Stolb2]|Rest]):- delete([Up1|Stolb1],Stolbs,Stolbs1), delete(Stolb2,Stolbs1,Rest). delete(X,[X|L],L). delete(X,[Y|L],[Y|L1]) :- delete(X,L,L1). member(X,[X|_]). member(X,[_|Tail]):- member(X,Tail). solve(Node,Solution) :- in_depth([],Node,Solution,Sol,4). in_depth(Path,Node,[Node|Path],[Node],_):- tgoal(Node). in_depth(Path,Node,Solution,[Node|Sol],Maxdepth) :- Maxdepth>0, Maxd=Maxdepth-1, after(Node,Node1), not(member(Node1,Path)), in_depth([Node|Path],Node1,Solution,Sol,Maxd). write_list([X|Rest]):- write("\n",X),readchar(_), write_list(Rest). write_list([]). goal %write("Vvedeie nachalnoe znachenie"),nl,readln(Str),convert( Str,Llist),L=Llist, write("Vvedeie konechnoe znachenie"),nl,readln(Str2),convert (Str2,Llist2), solve([Llist2,[],[]],Solution), write_list(Solution). Здесь ввод началного состояния с клавиатуры не работает. Если кто-нить знает как это можно реализовать, подскажите, пожалуйста Последний раз редактировалось Ketty_byyy; 14.11.2010 в 12:46. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Turbo prolog | ТриСемёрки | Помощь студентам | 1 | 03.11.2010 13:36 |
Удаление из списка. Turbo Prolog | Ketty_byyy | Помощь студентам | 1 | 23.05.2010 15:19 |
Turbo Prolog | L11L | Помощь студентам | 0 | 22.04.2010 11:17 |
Дополнить программу в Turbo Prolog | Paco de lucia | Помощь студентам | 0 | 08.03.2010 19:59 |
Удалить вершину с указанной меткой. Задача Turbo Prolog. | Iridda | Помощь студентам | 1 | 24.01.2009 19:33 |