jak to dát I index odpovídajících prvků do seznamu?

hlasů
0

Jen jsem začal učit prolog, a narazil na tento problém, kde jsem se snaží vstup index odpovídajících prvků z původního seznamu, do nového seznamu. Například, mám seznam Y = [[a], [b], [c], [d], [a, a], [b, b], [c]], a snažím se najít výskyt X = [C], a dal index kde [C] je, do nového seznamu.

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

Má N zobrazuje pouze počet výskytů, které N = 2. Ale chtěli výstup být N = [3,7]. Každá pomoc je oceňována. Dík!

Položena 10/10/2019 v 00:43
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Za prvé, s cílem mít seznam jako výsledek budete potřebovat další proměnnou do svého predikátu.

První dovolte mi ukázat řešení:

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

Nyní byste měli říkat takto:

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

a dostanete následující výsledek:

R = [3, 7]

Doufám, že chápete řešení. Ukládá současný index v Na dá ji zpět v Rpřípadě, že aktuální položka je ten, který hledáte.

Odpovězeno 10/10/2019 v 15:15
zdroj uživatelem

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