count(_,[],N,N).
count(Elem,[Elem|List],N,M) :- !, N1 is N+1, count(Elem,List,N1,M).
count(Elem,[_|List],N,M) :- count(Elem,List,N,M).
그래서, 내가 프롤로그이 최대 두 가지 방법을 썼다 (? 컷을 사용하여), 그리고 첫 번째 작품 위의)하지만, 왜 두 번째 나던 (또는 오히려, 나에게 여러 답변을 줄 것입니다 궁금 해서요 - 첫 번째 만 정확합니다) 왜 이것이지?
많은 감사
count(Z,X,R) :- count2(Z,X,R,0).
count2(W,[H|T],L,A):- (W == H), Lnew is A+1, count2(W,T,L,Lnew).
count2(W,[H|T],L,A):- count2(W,T,L,A).
count2(W,[],A,A).
나는 컷으로 두 번째 시도했다 : count (Z, X, R) : - count2 (Z, X, R, 0). W, [H | T], L, A) : -!, (W == H), Lnew는 A + 1, count2 (W, T, L, Lnew)입니다. 카운트 2 (W, [H | T], L, A) : - count2 (W, T, L, A). count2 (W, [], A, A) 하지만이 코드는 작동하지 않는 것 같습니다. 그래서 코드에 근본적으로 결함이 있다고 생각합니다. –