Estoy aprendiendo Prolog, y como ejercicio, estoy experimentando con una base de datos simple que calcula la suma de todos los números hasta el número dado (es decir 0 = 0, 1 = 1, 2 = 3, 3 = 6 , 4 = 10, ...). Es bastante fácil:¿Se puede hacer esto de forma recursiva en Prolog?
counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
que sopla en algún lugar alrededor de counting_sum(150000, X).
con un desbordamiento de pila. Entiendo que Prolog puede hacer la recursión de cola, pero si muevo la llamada recursiva al final de la regla, consigo
error(instantiation_error,(is)/2)
que supongo que me está diciendo que no puedo usar PrevSum
antes de que se ha unificado con counting_sum(PrevNum, PrevSum)
. ¿Es correcto, y hay alguna forma de hacer que esta cola sea recursiva? Estoy usando GNU Prolog 1.3.1 si eso hace alguna diferencia.
P.S. Todavía estoy inestable en la terminología. Avísame si utilicé los términos incorrectamente.
Tienes razón acerca de la causa del error de instancias. –