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