estoy contando el número de casos en una lista ...prólogo: la fijación de respuestas múltiples (usando corte?)
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).
Así, escribí esto de dos maneras en el prólogo, y trabaja la primera (arriba), pero tenía curiosidad por saber por qué el segundo no (o más bien, me dará respuestas múltiples, solo la primera es correcta) ¿por qué es esto?
muchas gracias
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).
probé el segundo con un corte, entonces: cuenta (Z, X, R): - count2 (Z, X, R, 0). count2 (W, [H | T], L, A): -!, (W == H), Lnew es A + 1, count2 (W, T, L, Lnew). count2 (W, [H | T], L, A): - count2 (W, T, L, A). count2 (W, [], A, A). pero esto tampoco parece funcionar, entonces pensé que tal vez el código es fundamentalmente defectuoso de alguna manera –