2012-01-19 5 views
0

Bonjour les gars, je travaille sur un jeu de Prolog et je dois écrire un morceau de code qui:Prolog Si Then Else échoue avec membre prédicats

  1. Prenez un numéro (ArmyNo) de l'utilisateur.
  2. Prendre une coordonnée X
  3. Prendre une coordonnée Y.

J'ai une liste qui est nommé TempBoard et il ressemble à ceci:

([ 
    (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,-,-) 
]). 

avant d'ajouter ceci (X, Y, w, ArmyNO) à la liste Je veux d'abord le vérifier si c'est déjà là.

J'ai essayé de le faire en utilisant ce code mais il ne semble pas fonctionner correctement:

%#######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

Je pense que votre problème est avec remplacer/3 ... Vous ne fournissez pas la source pour cela et au moins il semble qu'il manque un argument ... c'est-à-dire avec quoi remplacez-vous l'élément? – gusbro

Répondre

1
(X, Y, w, ArmyNo) 

ne peut être unifiée avec un membre de votre liste d'exemples parce que w n'unifient pas - . Vous pouvez avoir signifié W.