2012-05-26 1 views
0

J'essaie de faire un programme où l'utilisateur répond à des questions pour trouver un jeu, mais je ne pouvais pas comprendre comment travailler avec des listes et affirmer. J'ai essayé d'une autre manière avec le système de points de procédure. Le programme est comme ceci:Devinez le bon jeu pour un utilisateur avec prolog

yeah:- 
    write('Please answer the questions to find the game which suite you!'), 
    nl, 
    find(Game), 
    nl, 
    write('I guess that the game is :'), 
    nl, 
    write(Game), 
    undo. 


find(assassinsCreedII) :- 
    assassinsCreedII(assassins). 
find(sims3) :- 
    sims3. 
find(undefined). 

points(G) :- 
X=0, 
((G == assassins) -> 
((X = X + 1), 
print(X)); 
Y=0, 
(G == sims3) -> 
(Y = Y + 1)). 



assassinsCreedII(assassins) :- 
    actionGame(assassins), 
    adventureGame(assassins). 

sims3 :- 
    simulationGame(sims). 

actionGame(name) :- 
    test(do_you_like_action_games,name). 
adventureGame(name) :- 
    test(do_you_like_adventure_games,name). 
simulationGame(N) :- 
    test(do_you_like_simulation_games,N). 

requisition(Question,Name) :- 
    write(Question), 
    write('?'), 
    read(Answer), 
    nl, 
    ( (Answer==yes ; Answer==y) 
    -> 
    assert(yes(Question)) 
    ; 
    assert(no(Question)), 
    fail 
    ), 
    points(Name). 

:- dynamic yes/1,no/1. 

test(Q,Name) :- 
    (yes(Q) -> 
    true; 
    (no(Q) 
    -> fail 
    ; requisition(Q,Name) 
    ) 
    ). 

undo :- 
    retract(yes()),fail. 
undo :- 
    retract(no()), fail. 
undo. 

Quand je lance le programme est le résultat: - Oui. Veuillez répondre aux questions pour trouver le jeu qui vous convient le mieux! Je suppose que le jeu est: undefined true.

Je ne peux pas comprendre pourquoi cette façon est fausse. Comment puis-je faire cela avec assert ou list afin que je puisse trouver le jeu avec les plus gros points et l'imprimer?

Répondre

0

Ce n'est pas la bonne façon d'utiliser rétracter.

essayer comme ça:

retractall(yes(_)) 

cela rétracter toutes les réponses

Questions connexes