Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Преобразование строки с координатами в таблицу


Автор: temnenkaja 1.4.2009, 19:44
Программа выполняет поиск расположения ладей, при котором ни одна не бьет другую
Результатом является список пар координат месторасположения на доске, но его надо преобразовать в таблицу, которая представляет собой доску, т.е. места, где отсутствует фигура обозначаются как "_", где есть "Х". Помогите выполнить преобразование:

DOMAINS

intlist=integer*
castlelist=castle*
castle=c (integer,integer)

PREDICATES
solution (castlelist, intlist)
notbeat (castle, castlelist)
belongs (integer, intlist).
template2 (castlelist)
template3 (castlelist)
template4 (castlelist)
template5 (castlelist)
template6 (castlelist)
template7 (castlelist)
template8 (castlelist)
genlist (integer, integer, intlist, intlist)
select (integer, castlelist)
start

CLAUSES
solution ([ ], Reslist).
solution ([c (X,Y)|Rest],Reslist):- solution (Rest,Reslist), 
                                belongs (Y, Reslist) , 
                                notbeat (c (X,Y),Rest).
notbeat (_,[ ]):-!.
notbeat (c (X,Y), [c (X1,Y1)|Rest]):- Y<>Y1, 
                              notbeat (c (X,Y), Rest).                                                                                                          
                                
belongs (X, [X|L]).
belongs (X, [Y|L]):- belongs (X,L).
template2 ([c (1,Y1),c (2,Y2)]).
template3 ([c (1,Y1),c (2,Y2),c (3,Y3)]).
template4 ([c (1,Y1),c (2,Y2),c (3,Y3),c (4,Y4)]).
template5 ([c (1,Y1),c (2,Y2),c (3,Y3),c (4,Y4),c (5,Y5)]).
template6 ([c (1,Y1),c (2,Y2),c (3,Y3),c (4,Y4),c (5,Y5),c (6,Y6)]).
template7 ([c (1,Y1),c (2,Y2),c (3,Y3),c (4,Y4),c (5,Y5),c (6,Y6),c (7,Y7)]).
template8 ([c (1,Y1),c (2,Y2),c (3,Y3),c (4,Y4),c (5,Y5),c (6,Y6),c (7,Y7),c (8,Y8)]).

select(FS, X):-
  FS=2, template2(X);
  FS=3, template3(X);
  FS=4, template4(X);
  FS=5, template5(X);
  FS=6, template6(X);
  FS=7, template7(X);
  FS=8, template8(X),exit(0).
  
genlist (FS, 0, Reslist, Reslist):-!.
genlist(FS, N, Tmplist, Reslist):-
Tmp2list=[N|Tmplist], N2=N-1, genlist(FS, N2, Tmp2list, Reslist).  

start:-write ("Write N (from 2 to 8), N="),readint(N),nl,genlist(1, N, [],Reslist),select (N, X),
solution(X,Reslist),nl,write (X),fail, nl.
start.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)