帽子类问题1

/*有a,b,c,d,e5个人，每人头戴一顶黑色或者白色的帽子，每个人只能看到其他人头上帽子的颜色，看不见自己的。戴白帽子的当且仅当他说真话，戴黑帽子的当且仅当他说假话。已知a：我看见三顶白帽子和一顶黑帽子b：我看见四顶黑帽子c：我看见一顶白帽子和三顶黑帽子e：我看见四顶黑帽子求五个人各自戴何种颜色的帽子*/a(1).a(0).b(1).b(0).c(1).c(0).d(1).d(0).e(1).e(0).a_says(A,B,C,D,E):-A+B+C+D+E=:=4,A=1.a_says(A,B,C,D,E):-not((A+B+C+D+E=:=3)),A=0.b_says(A,B,C,D,E):-A+B+C+D+E=:=1,B=1.b_says(A,B,C,D,E):-not((A+B+C+D+E=:=0)),B=0.c_says(A,B,C,D,E):-A+B+C+D+E=:=2,C=1.c_says(A,B,C,D,E):-not((A+B+C+D+E=:=1)),C=0.e_says(A,B,C,D,E):-A+B+C+D+E=:=1,E=1.e_says(A,B,C,D,E):-not((A+B+C+D+E=:=0)),E=0.hatcondition(A,B,C,D,E):-a(A),b(B),c(C),d(D),e(E),a_says(A,B,C,D,E),b_says(A,B,C,D,E),c_says(A,B,C,D,E),e_says(A,B,C,D,E),assert(count(0)),count(N),retract(count(0)),NN is N+1,write(NN),asserta(count(NN)),(NN>1->retract(count(N));true),write((a(A),b(B),c(C),d(D),e(E))),nl,fail.hatcondition(A,B,C,D,E):-retract(count(N)),fail.