翠竹的同学都在某德资企业工作,溪兰是翠竹的大学同学,洞松是该德资企业的部门经理。 该德资企业的员工有些来自淮安。该德资企业的员工都曾到德国研修,他们都会说德语。 以下哪项可以从以上陈述中得出?(MBA.2013.51) (A)洞松与溪兰是大学同学。 (B)翠竹的大学同学有些是部门经理。 (C)翠竹与洞松是大学同学。 (D)溪兰会说德语。 (E)洞松来自淮安。
xxxxxxxxxx
91work(X,dezi):-tongxue(cuizu,X).
2tongxue(cuizu,xilan).
3work(dongsong,dezi).
4speak(X,deyu):-work(X,dezi).
5answer:-
6tongxue(cuizu,dongsong).
7
8?- answer.
9false.
通过尝试各个选项,可以得出(D)是正确的。
xxxxxxxxxx
51answer:-
2speak(xilan,deyu).
3
4?- answer.
5true.
张老师让小李、小王、小赵和小杨四位同学确认徐州会战、南京保卫战、湘西会战、淞沪会战四场战役的先后顺序。
子集验证函数
xxxxxxxxxx
161subset([],_).
2subset([X|Y], Z):-
3member(X,Z),
4subset(Y,Z).
5
6?- subset([],[a,b,c]).
7true.
8
9?- subset([c,b],[a,b,c]).
10true .
11
12?- subset([c,d],[a,b,c]).
13false.
14
15?- subset([a,b,c],[a,b]).
16false.
元素互异验证函数
xxxxxxxxxx
161unique([]).
2unique([X|Y]):-
3not(member(X, Y)),
4unique(Y).
5
6?- unique([]).
7true.
8
9?- unique([a,a,b]).
10false.
11
12?- unique([a,b]).
13true.
14
15?- unique([a,b,c]).
16true.
匹配计数函数
xxxxxxxxxx
201total([], _, 0).
2total([A1|A2], [B1|B2], N):-
3(A1=B1, N1=1; A1\=B1, N1=0),
4total(A2, B2, N2),
5N is N1+N2.
6
7?- total([], _, X).
8X = 0.
9
10?- total([a,b,d,c],[d,b,a,c],X).
11X = 2.
12
13?- total([a,b,c,d],[d,b,a,c],X).
14X = 1.
15
16?- total([a,b,c],[d,b,a,c],X).
17X = 1.
18
19?- total([a,b,d,c],[d,b,a,c],2).
20true.
确定顺序
xxxxxxxxxx
171answer:-
2Orders=[_,_,_,_],
3subset(Orders, [1,2,3,4]),
4unique(Orders),
5total(Orders, [1,2,3,4], Li),
6Li=1,
7total(Orders, [1,3,4,2], Wang),
8Wang=1,
9total(Orders, [4,3,1,2], Zhang),
10Zhang=0,
11total(Orders, [4,2,3,1], Yang),
12Yang=2,
13write(Orders).
14
15?- answer.
16[3,2,4,1]
17true.
确定顺序函数
xxxxxxxxxx
161getOrders(Orders):-
2Orders=[_,_,_,_],
3subset(Orders, [1,2,3,4]),
4unique(Orders),
5
6total(Orders, [1,2,3,4], Li),
7Li=1,
8total(Orders, [1,3,4,2], Wang),
9Wang=1,
10total(Orders, [4,3,1,2], Zhang),
11Zhang=0,
12total(Orders, [4,2,3,1], Yang),
13Yang=2.
14
15?- getOrders(Orders).
16Orders = [3, 2, 4, 1].
确定选项函数
xxxxxxxxxx
101determineAnswer(X,Orders):-
2getOrders(Orders),
3((X=a, nth0(1,Orders,1,_));
4(X=b, nth0(2,Orders,2,_));
5(X=c, \+(nth0(0,Orders,3,_)));
6(X=d, \+(nth0(3,Orders,4,_)))).
7
8?- determineAnswer(X,Orders).
9X = d,
10Orders = [3, 2, 4, 1].
完整程序
321subset([],_).
2subset([X|Y], Z):-
3member(X,Z),
4subset(Y,Z).
5
6unique([]).
7unique([X|Y]):-
8not(member(X, Y)),
9unique(Y).
10
11total([], _, 0).
12total([A1|A2], [B1|B2], N):- (A1=B1, N1=1; A1\=B1, N1=0), total(A2, B2, N2), N is N1+N2.
13
14getOrders(Orders):-
15Orders=[_,_,_,_],
16subset(Orders, [1,2,3,4]),
17unique(Orders),
18total(Orders, [1,2,3,4], Li),
19Li=1,
20total(Orders, [1,3,4,2], Wang),
21Wang=1,
22total(Orders, [4,3,1,2], Zhang),
23Zhang=0,
24total(Orders, [4,2,3,1], Yang),
25Yang=2.
26
27determineAnswer(X,Orders):-
28getOrders(Orders),
29((X=a, nth0(1,Orders,1,_));
30(X=b, nth0(2,Orders,2,_));
31(X=c, \+(nth0(0,Orders,3,_)));
32(X=d, \+(nth0(3,Orders,4,_)))).