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.