как поместить индекс соответствующих элементов в список? - PullRequest
0 голосов
/ 10 октября 2019

Я только начал изучать пролог и столкнулся с этой проблемой, когда я пытаюсь ввести индекс соответствующих элементов из начального списка в новый список. Например, у меня есть список Y = [[a], [b], [c], [d], [a, a], [b, b], [c]], и я пытаюсь найтипоявление X = [c] и поместите индекс, где [c] находится, в новый список.

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

Мой N показывает только количество вхождений, которое N = 2. Но я бы хотел, чтобы на выходе было N = [3,7]. Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 10 октября 2019

Прежде всего, чтобы получить список в качестве результата, вам понадобится еще одна переменная в вашем предикате.

Сначала позвольте мне показать вам решение:

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

Теперь вам следуетназовите это как:

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

, и вы получите следующий результат:

R = [3, 7]

Я надеюсь, вы понимаете решение. Он сохраняет текущий индекс в N и возвращает его в R, если текущий элемент - тот, который вы ищете.

...