Come faccio a mettere l'indice degli elementi corrispondenti in una lista?

voti
0

Ho appena iniziato prologo di apprendimento, e sono imbattuto in questo problema in cui sto cercando di inserire l'indice di elementi corrispondenti da un elenco iniziale, ad una nuova lista. Per esempio, ho una lista di Y = [[a], [B], [C], [d], [a, a], [b, b], [c]], e sto cercando di trovare il verificarsi di X = [c], e mettere l'indice dove [c] è, in un nuovo elenco.

find( X, [ X | Y ], N) :-
    find(X, Y, N1), N is N1 +1.
find( X, [ H | Y ], N ) :-
    find( X, Y, N).

La mia N mostra solo il numero di occorrenze, che N = 2. Ma vorrei che l'uscita sia N = [3,7]. Ogni aiuto è apprezzato. Grazie!

È pubblicato 10/10/2019 alle 00:43
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Prima di tutto, in modo da avere una lista come risultato avrete bisogno di un'altra variabile nella vostra predicato.

In primo luogo mi permetta di mostrare la soluzione:

find(_,[],_,[]).
find(X,[X|L],N,[N|R]):-
    N1 is N+1,
    find(X,L,N1,R).
find(X,[_|L],N,R):-
    N1 is N+1,
    find(X,L,N1,R).

Ora si dovrebbe chiamarlo come:

?- find([c],[[a],[b],[c],[d],[a,a],[b,b],[c]],1,R).

e si otterrà il seguente risultato:

R = [3, 7]

Spero che tu capisca la soluzione. Memorizza l'indice corrente in Ne lo rimette in Rse l'elemento corrente è quello che si sta cercando.

Risposto il 10/10/2019 a 15:15
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more