2012-01-19 3 views
0

Привет, ребята я работаю на прологе игры, и мне нужно написать кусок кода, который будет:Пролог, если потом еще потерпит неудачу с предикатом член

  1. принять ряд (ArmyNo) от пользователя.
  2. Возьмите координату X
  3. Возьмите координату Y.

Тогда у меня есть список, который называется TempBoard и это выглядит следующим образом:

([ 
    (1,1,-,-),(1,2,-,-),(1,3,-,-),(1,4,-,-), 
    (2,1,-,-),(2,2,-,-),(2,3,-,-),(2,4,-,-), 
    (3,1,-,-),(3,2,-,-),(3,3,-,-),(3,4,-,-), 
    (4,1,-,-),(4,2,-,-),(4,3,-,-),(4,4,-,-) 
]). 

, прежде чем я добавить (X, Y, W, ArmyNO) к списку я сначала хочу, чтобы проверить его если он уже существует.

Я пытался сделать это с помощью этого кода, но это, кажется, не работает должным образом:

%#######Got the number#### 
     repeat, 
    %Get Cordinates X & Y. 
    writelist([TempBoard,'select coordinates for the horizontal axis 1 to 4 to place   your soldier Mr. Human',nl]), 
    read(X), 
    writelist(['select coordinates for the vertical axis 1 to 4 to place your soldier Mr. Human',nl]), 
    read(Y), 
    %Check if they are in the list. 
      (
       member((X,Y,w,ArmyNo),TempBoard) -> 
         ( replace((X,Y,w,ArmyNo),TempBoard,NewBoard)) ; 
       (
      writelist(['selected positions are not available in the table Mr.Human',nl]) , fail 
      ) 
     ). 

      %% 
+0

Я думаю, что ваша проблема связана с заменой/3 ... Вы не предоставляете источник для этого и, по крайней мере, кажется, что отсутствует один аргумент ... например, что вы заменяете элемент? – gusbro

ответ

1
(X, Y, w, ArmyNo) 

не может быть объединен с любым членом вашего примера списка, потому что w не унифицировать с - , Возможно, вы имели в виду W.

Смежные вопросы