agregado / 3 em swi-prolog
Eu preciso contar tudoX
, aquelesome_predicate(X)
e realmente existem muitos dessesX
. Qual o melhor jeito pra fazer isso
primeira pista é encontrar tudo, acumular em uma lista e retornar o compriment
countAllStuff( X ) :-
findall( Y
, permutation( [1,2,3,4,5,6,7,8,9,10], Y )
, List
),
length( List, X ).
(permutation/2
é apenas um exemplo que mostra que existem muitas variantes e é uma maneira ruim de coletar tudo)
Obviamente, tenho excesso de pilha.
?- countAllStuff( X ).
ERROR: Out of global stack
Estou tentando substituirfindall
parasetof
e nada muda.
Finalmente, eu fundeiaggregate
redicados (clicáveis) e tentando usá-l
?- aggregate(count, permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 .
?- aggregate(count, [1,2,3,4], permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 ;
X = [1, 2, 4, 3],
Y = 1 ;
Está tudo errado, eu acho. Prefiro obter algo como
?- aggregate(count, permutation([1,2,3,4], X), Y ).
Y = 24 .
1) O que estou fazendo de errado?
2) Como posso declarar o predicado para obter a resposta cert