原题在此处。
prolog作为数理逻辑的产物,用它来解决此类问题是再合适不过了:
criminal(K):-
member(K,[a,b,c,d]),
(K\=a -> A=1;A=0),
(K=d -> B=1;B=0),
(K=b -> C=1;C=0),
(K\=d -> D=1;D=0),
A+B+C+D=:=1.
运行结果是:
K = a
也可以这样:
member(K,[a,b,c,d]),(K\=a->A=1;A=0),(K=d->B=1;B=0),(K=b->C=1;C=0),(K\=d->D=1;D=0),A+B+C+D=:=1.
结果为:
K = a,
A = 0,
B = 0,
C = 0,
D = 1 ;
false.
从而得出结果
更新
中间涉及的一些语法包括:
=:=表示等于
:-用来定义规则
=表示unify
\=表示=的否定
,表示且
;表示或
更新
**表示指数
更多参见此处
