2014-10-26 3 views
1

Я пытаюсь написать предикат в прологе под названием occurrences(Sub, Term, N), который вернет true, если N - это число вхождений Sub в Term. Я использую SWI-пролог, и я нашел это built-in predicate called contains_term(Sub, Term), это правда, если Sub содержится в Term. Поэтому я пытаюсь подсчитать количество раз contains_term, и это будет N в предикате вхождения. Проблема в том, что я не совсем уверен, как это сделать, и тот факт, что contains_term является предопределенным предикатом, делает его более сложным выяснить. Любая помощь будет оценена по достоинству.Подсчет вхождений подтермого в члене в прологе

+0

У вашей связанной страницы есть предикат originences_of_term. Вы не можете это использовать? – lmz

ответ

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). 
Смежные вопросы