Как посчитать все вхождения в прологе - PullRequest
0 голосов
/ 09 декабря 2018

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

Предикат, который я должен написать, должен работать так:

inde(1, [1,2,1,1,2,2,1],X) -> X=[1,3,4,7]

Используемая программа работает следующим образом.:

inde([3,2,1,1],1,X) -> X = 3 

Я вставлю код к этому ниже

inde([Element|_], Element, 1). 
inde([_|Tail], Element, Ans):- inde(Tail, Element, Ans1), Ans is Ans1+1.  

Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 10 декабря 2018

Решение вашей проблемы может быть следующим:

inde(E,L,LO):-
    inde(E,L,[],LO,1).
inde(_,[],L,L,_).
inde(E,[E1|T],L1,LO,I):-
    E \= E1,
    I1 is I+1,
    inde(E,T,L1,LO,I1).
inde(E,[E|T],L,LO,I):-
    I1 is I+1,
    append(L,[I],L1),
    inde(E,T,L1,LO,I1).

?- inde(1,[1,2,1,1,2,2,1],L).
L = [1, 3, 4, 7]
false

Этот предикат просто проверяет, является ли выбранный элемент первым элементом списка.Если это так, он сохраняет в выходном списке индекс элемента и снова вызывает тот же предикат с остальной частью списка и индексом, увеличенным на единицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...