我需要编写一个序言谓词,该谓词将计算给定列表的所有出现次数。香港专业教育学院搜索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.
有人能指出我正确的方向吗?
答案 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
此谓词仅检查所选元素是否为列表的第一个元素。如果是这样,它将在输出列表中保存该元素的索引,并再次调用该谓词,并将其余列表和索引加一。