una recorrer metodos listas lista elementos agregar list prolog

recorrer - Prolog encuentra índices en una lista y los muestra como una lista



metodos de listas en python (1)

Prueba esto.

indices_zero(Ls, R) :- indices_zero(Ls, 1, [], R). indices_zero([], _, Result, Result). indices_zero([0|T], N, Result_in, Result_out) :- N1 is N + 1, indices_zero(T, N1, [N|Result_in], Result_out). indices_zero([H|T], N, Result_in, Result_out) :- H /== 0, N1 is N + 1, indices_zero(T, N1, Result_in, Result_out). ?- indices_zero([1,-2,3,0,5,0],R). R = [6, 4] ; false.

Aquí hay una variación que genera el resultado al retroceder.
Observe que el orden de los índices en la respuesta está ahora en orden ascendente.

indices_zero(Ls,R) :- indices_zero(Ls,1,R). indices_zero([],_,[]). indices_zero([0|T], N, [N|Result]) :- N1 is N + 1, indices_zero(T, N1, Result). indices_zero([H|T], N, Result) :- H /== 0, N1 is N + 1, indices_zero(T, N1, Result). ?- indices_zero([1,-2,3,0,5,0],R). R = [4, 6] ; false.

Estoy tratando de implementar un predicado indices_zero(L,R) , que debería encontrar todas las posiciones de ceros en una lista y sacar los índices en una nueva lista. Estoy tratando de hacer esto con acumuladores. Por ejemplo:

?-indices_zero([1,-2,3,0,5,0],R). R=[4,6];

He implementado lo siguiente:

indices_zero(Ls,R):- indices_zero(Ls,1,[],Result). indices_zero([L|Ls],N,R,Result):- L=:=0, N1 is N+1, indices-zero(Ls,N1,[N|R],Result). indices_zero([L|Ls],N,R,Result):- L=/=0, N1 is N+1, indices_zero(Ls,N1,R,Result). indizes_zero([],_,Result,Result).

No estoy seguro de por qué mi implementación no funciona. Creo que mi cláusula de sed no es correcta, pero no sé cómo resolver esto.