Re: [问题] 一题Prolog

楼主: yauhh (小y宝贝)   2014-08-17 21:23:47
※ 引述《kamihane (也无风雨也无晴)》之铭言:
: 题目是 要将http://www.brainbashers.com/showpuzzles.asp?puzzle=ZUYK
: 写成prolog让答案在输入solve(X)的时候可以拿到X =犯人
: 我知道这题的方法是判断次数,出现四次的statements就是答案了。
: 所以我写了这样:
: solve(X) :-
: member(X,[Alan,Brian,Charlie,Dave,Eddie,Freddie]),
: (X = Alan -> (B=1,D=1,E=1);(B=0,D=0,E=0)),
: (X = Brian -> (A=1,C=1);(A=0,C=0)),
: (X = Charlie -> (B=1,D=1,E=1,F=1);(B=0,D=0,E=0,F=0)),
: (X = Dave -> (A=1,E=1,F=1);(A=0,E=0,F=0)),
: (X = Eddie -> (A=1,B=1,C=1);(A=0,B=0,C=0)),
: (X = Freddie -> (C=1,D=1,E=1);(C=0,D=0,E=0)),
: A+B+C+D+E+F=:=4.
: 但是他最后答案一直只有跑出false,有没有人可以帮忙解答呢?
逻辑上抓到重点,基本的式子是
theft('Alan') :- lie_on('Brian', 'Alan'),
lie_on('Dave', 'Alan'),
lie_on('Eddie', 'Alan').
如果Brian说Alan不是贼是假的,Dave说Alan不是贼是假的,Eddie说Alan不是贼是假的,
那么Alan就是贼。
剩下的程式问题,是最后要做A+B+C+D+E+F时,前面可能根本没有A,B,C,D,E,或F变量,
无法加起来,所以都跑出false。

Links booklink

Contact Us: admin [ a t ] ucptt.com