计算prolog中术语中子项的出现次数

时间:2014-10-26 19:25:47

标签: prolog

我试图在名为occurrences(Sub, Term, N)的prolog中编写谓词,如果NSubTerm的出现次数,则该谓词将返回true。我正在使用SWI-prolog,如果Sub中包含Term,我发现此built-in predicate called contains_term(Sub, Term)为真。因此,我尝试计算contains_term为真的次数并使其成为事件谓词中的N。问题是我不太确定如何执行此操作,并且contains_term是预定义谓词的事实使得更难以弄清楚。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

term_subterm_n(T, S, N) :-
   bagof(t, term_subterm(T,S), Ts),
   length(Ts, N).

term_subterm(T, T).
term_subterm(T, S) :-
   compound(T),
   T =.. [_|Es],
   member(E, Es),
   term_subterm(E, S).