Пролог распечатать 2 таблицы размеров - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть квадрат с начальной и конечной точками, а также места, куда я не могу пойти.И моя программа должна найти способ добраться до финиша:

ar_galima([], _, _):-!.
ar_galima([Prad|Galas],Kelias, X) :- not(Prad == X), not(member(X, Kelias)), ar_galima(Galas, Kelias, X). 

gener(Stac_M, Stac_K, k(A,B), k(Y,B)) :-  Y is A + 1, Y > 0, Y =< Stac_M, B =< Stac_K.
gener(Stac_M, Stac_K, k(A,B), k(Y,B)) :-  Y is A - 1, Y > 0, Y =< Stac_M, B =< Stac_K.
gener(Stac_M, Stac_K, k(A,B), k(A,Y)) :-  Y is B + 1, Y > 0, Y =< Stac_K, A =< Stac_M.
gener(Stac_M, Stac_K, k(A,B), k(A,Y)) :-  Y is B - 1, Y > 0, Y =< Stac_K, A =< Stac_M.

paieska(_, _,_,Tikslas,Tikslas,[], _):-!.
paieska(Stac_M, Stac_K, Draudziama, Prad, Tikslas, [K|Kelias], Kelias2) :- 
      gener(Stac_M, Stac_K, Prad, K), ar_galima(Draudziama, Kelias2, K), 
      paieska(Stac_M, Stac_K, Draudziama, K, Tikslas, Kelias, [K|Kelias2]).

trasa(Ilgis, Aukstis, Draudziama, k(X,Y), Tikslas, Kelias) :-
      paieska(Ilgis,Aukstis, Draudziama, k(X,Y), Tikslas,Kelias, []).

Я нахожу маршруты до финиша, и теперь я застрял, выводя маршрут (список) в 2-мерную таблицу в терминале (ну, простой рисунокпокажите маршрут).

пример списка для вывода: X = [k(2, 1), k(3, 1), k(4, 1), k(4, 2), k(4, 3), k(4, 4)] ;

Может кто-нибудь подсказать мне, как я должен вывести таблицу 2 измерений в терминал?

РЕДАКТИРОВАТЬ:

X должны быть напечатаны:

 + + + *
 + + + *
 + + + *
 + * * *

печать perdicate может выглядеть следующим образом:

printTable (N, M, X): - ...

, где N - количество строк, M - количество столбцов и X - список координат.

1 Ответ

1 голос
/ 21 декабря 2010

Вы можете сделать это примерно так:

print_table(H, W, L):-
  succ(W, W1),
  print_table(4, 1, H, W1, L).

print_table(1, W, _, W, _):- !.
print_table(Y, W, H, W, L):-
  succ(NY, Y),
  nl,
  !,
  print_table(NY, 1, H, W, L).
print_table(Y, X, H, W, L):-
  (member(k(X, Y), L)->C='* ';C='+ '),
  write(C),
  succ(X, NX),
  !,
  print_table(Y, NX, H, W, L).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...