2015-09-21 9 views
1

Как говорится в названии, я хочу написать программу, которая делает это.ставит цель Prolog как вход в первую позицию аргумента и возвращает количество раз, когда эта цель преуспевает во второй позиции аргумента

примером может быть:

?- count(member(X,[1,2,3]), N). 

N = 3 

Yes 

Но не только для сборки в члене, но и для некоторых операторов, таких как:

?- count(17 =:= 12 + 5, N). 

N = 1 

Yes 

Может кто-то помочь мне начать?

ответ

2

Попробуйте это:

?- findall(., Goal, Ls), length(Ls, L).

Пример:

 
?- findall(., member(X,[1,2,3]), Ls), length(Ls, L). 
L = 3, 
... . 
+0

О, да, я глупый СПАСИБО! –

+3

Я снова рекомендую вам мыслить в терминах * отношений * при программировании в Prolog. Этот вопрос, вероятно, связан с предыдущим встречным вопросом, и я рекомендую вам подумать об этом более тщательно. – mat

0

библиотека (aggregate) была реализована, чтобы обеспечить решения для вашей проблемы, и многое другое ...

?- aggregate(count, X^member(X,[1,2,3]), N). 
N = 3. 

?- aggregate(count, 17 =:= 12 + 5, N). 
N = 1. 

 Смежные вопросы

  • Нет связанных вопросов^_^