首页 文章

如何计算prolog中的所有出现次数

提问于
浏览
0

我需要写一个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

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

    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
    

    该谓词只是检查所选元素是否是列表的第一个元素 . 如果是这样,它会在输出列表中保存元素的索引,并再次使用列表的其余部分调用相同的谓词,并将索引递增1 .

相关问题