高人来帮菜鸟解题吧 智力题 谢谢啦
prolog吧
全部回复
仅看楼主
level 1
Kim打豆豆 楼主
有一起 抢劫案。 已知:
1.嫌犯除了 a b c 没有别人。
2. 嫌犯(们)是开卡车逃离现场的。
3. b 不会开卡车。
4. c 从来不会在 没有 a 犯罪的时候 犯罪。
问 a 是不是 有罪?
怎么能用prolog 实现?谢谢 前辈指教!
2015年11月24日 20点11分 1
level 13
%Rule 1
%嫌犯除了 a b c 没有别人。
suspect(a).
suspect(b).
suspect(c).
gang([Man]):-
 suspect(Man).
gang(Gang):-
 Gang=[Man|Others],
 suspect(Man),
 gang(Others).
%Rule 2
%嫌犯(们)是开卡车逃离现场的。
run(Gang):-
 member(Man,Gang),
 suspect(Man),
 \+ can_not_drive(Man).
%Rule 3
%b 不会开卡车。
can_not_drive(b).
%Rule 4
%c 从来不会在 没有 a 犯罪的时候 犯罪。
c_a(Gang):-
 member(c,Gang),
 member(a,Gang).
c_a(Gang):-
 \+ member(c,Gang).
%Goal
%无罪:在所有满足条件的组合里,存在嫌疑人不在内的组合,则嫌疑人无罪。
innocent(Man):-
 append(Gang,_,[_,_,_]),
 Gang \= [],
 subset(Gang,[a,b,c]),
 gang(Gang),
 run(Gang),
 c_a(Gang),
 \+ member(Man,Gang).
%有罪:嫌疑人无罪的取反。
guilt(Man):-
 \+ innocent(Man).
%Other
%列表
member(A,[A|_]).
member(A,[_|T]):-
 member(A,T).
append([], X, X).
append([A|X], Y, [A|Z]) :- append(X,Y,Z).
subset([],Set).
subset(Sub,Set):-
 Sub=[Member|Others],
 member(Member,Set),
 subset(Others,Set),
 \+ member(Member,Others).
2017年06月17日 07点06分 2
level 13
查询用guilt/1谓词,结果是a有罪.
?- guilt(a).
yes
2017年06月17日 07点06分 3
1