如何计算序幕中的所有事件

时间:2018-12-09 19:27:20

标签: list prolog

我需要编写一个序言谓词,该谓词将计算给定列表的所有出现次数。香港专业教育学院搜索stackoverflow来找到解决方案,我发现最接近的是仅计算第一次出现的谓词。

我必须写的谓词应该像这样工作:

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 :(得分:0)

您的问题的解决方案可能是:

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

此谓词仅检查所选元素是否为列表的第一个元素。如果是这样,它将在输出列表中保存该元素的索引,并再次调用该谓词,并将其余列表和索引加一。