猎人带着一框草莓,一只羊和一条狼要过河。但是只有一条小船。条件如下:
* 一次只可以载一样东西。
* 如果让羊和草莓在一起,而猎人不在旁边的话,羊就会把草莓只掉。
* 如果让狼和羊在一起,而猎人不在旁边的话,狼就会把羊吃掉。
1 guohe([],_,_):-!.
2 error(A):-
3 not(member(r,A)),
4 member(l,A),
5 member(y,A),
6 !.
7 error(A):-
8 not(member(r,A)),
9 member(y,A),
10 member(c,A),
11 !.
12 ok(A):-not(error(A)).
13 % 过去2
14 guohe(A,C,J):-
15 select(r,A,X),
16 select(D,X,Y),
17 ok(Y),
18 sort(Y,S),
19 not(member(S,J)),
20 B=[r,D],
21 append(B,C,C1),
22 length(J,L),
23 write(L),
24 write(‘从此岸运’-r-D-‘到彼岸.’),
25 write(‘此岸’-S-‘彼岸’-C1),
26 nl,
27 J1=[S|J],
28 guohe(S,C1,J1).
29 % 人过去
30 guohe(A,C,J):-
31 select(r,A,X),
32 ok(X),
33 sort(X,S),
34 not(member(S,J)),
35 append([r],C,C1),
36 length(J,L),
37 write(L),
38 write(‘从此岸运’-r-‘到彼岸.’),
39 write(‘此岸’-S-‘彼岸’-C1),
40 nl,
41 J1=[S|J],
42 guohe(S,C1,J1).
43 % 过来2
44 guohe(A,C,J):-
45 select(r,C,X),
46 select(D,X,Y),
47 ok(Y),
48 B=[r,D],
49 append(B,A,A1),
50 sort(A1,S),
51 not(member(S,J)),
52 length(J,L),
53 write(L),
54 write(‘从彼岸运’-r-D-‘到此岸.’),
55 write(‘此岸’-S-‘彼岸’-Y),
56 nl,
57 J1=[S|J],
58 guohe(S,Y,J1).
59 % 人过来
60 guohe(A,C,J):-
61 select(r,C,X),
62 ok(X),
63 append([r],A,A1),
64 sort(A1,S),
65 not(member(S,J)),
66 length(J,L),
67 write(L),
68 write(‘从彼岸运’-r-‘到此岸.’),
69 write(‘此岸’-S-‘彼岸’-X),
70 nl,
71 J1=[S|J],
72 guohe(S,X,J1).
73 :-guohe([c,l,r,y],[],[[c,l,r,y]]).