Jak umieścić indeks elementy pasujące do listy?

głosy
0

Właśnie rozpoczął naukę prolog, i natknąłem się na ten problem, gdzie staram się wprowadzić indeks pasujących elementów z początkowej listy, do nowej listy. Na przykład, miał listę Y = [[a], [B], [C], [D], [A, A], [B, B], [C]] a ja próbując znaleźć występowanie X = [C] i umieścić wskaźnik gdzie [C] jest to, do nowej listy.

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

Moja N tylko pokazuje liczbę zdarzeń, które N = 2. Ale chciałbym być wyjście do N = [3,7]. Każda pomoc jest mile widziana. Dzięki!

Utwórz 10/10/2019 o 00:43
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Przede wszystkim, aby mieć listę jako wynik będzie potrzeba innej zmiennej do swojego orzecznika.

Po pierwsze chciałbym pokazać rozwiązanie:

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).

Teraz należy nazwać tak:

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

a otrzymasz następujący wynik:

R = [3, 7]

Mam nadzieję, że rozumiesz rozwiązanie. Przechowuje bieżący indeks Ni umieszcza ją z powrotem R, jeśli bieżąca pozycja jest tym, którego szukasz.

Odpowiedział 10/10/2019 o 15:15
źródło użytkownik

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