2012-05-26 132 views
0

我正在嘗試製作一個程序,用戶可以回答問題以查找遊戲,但我無法理解如何使用列表和聲明。我嘗試了另一種程序點系統的方式。該方案是這樣的:爲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. 

當我運行該程序的結果是: - 是啊。 請回答問題找到遊戲哪個套件你!我想這個遊戲是:undefined true。

我不明白爲什麼這種方式是錯誤的。我如何用assert或list來做到這一點,這樣我就可以找到最大點的遊戲並打印出來?

回答

0

這不是使用縮進的正確方法。

嘗試這樣的:

retractall(yes(_)) 

這將收回所有答案