Codigo em prolog

Galera, todo tentando rodar esse codigo ai abaixo.

LINGUAGEM PROLOG, alguem saberia me explicar a logica desse programa.

% Fatorial
fat(0,1).
fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1.
f_print(N) :-
write('Fatorial de '), write(N), write(' = '),
fat(N,X), write(X), nl, halt.
% Chamada do programa principal
main :-
f_print(30).
main.

EDIT - acertei os apóstrofes que deveriam ter aparecido no lugar dos “?”

vc quer saber mesmo a lógica? :lol:

isto é Fatorial! :smiley:

sabes o q eh o fatorial né?! :roll:

Antes de mais nada, o que nosso colega disse acima é verdade, isso é puramente a extração de um fatorial.

Mas pra ajudar a melhro entender o PROLOG>

Segue

http://pt.wikipedia.org/wiki/Prolog
http://www.swi-prolog.org/
http://www.din.uem.br/ia/ferramen/prolog/

Abraços.

Fabio Nascimento

fat(0,1).
–> Declaramos que o fatorial de 0 é 1.

fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1.
–> Declaramos que:

  • N1 é N - 1.
  • O fatorial de N - 1 é F1, onde F é N * F1.

f_print(N) :-
write('Fatorial de ‘), write(N), write(’ = '),
fat(N,X), write(X), nl, halt.
–> Aqui imprimimos "Fatorial de " + N " + “=”, e então calculamos o fatorial de N e jogamos em X. Imprimimos X.

Veja que as coisas são um pouco "ao contrário"; mas (é que não estou com uma implementação do Prolog aqui para lhe afirmar) acho que dá para criar uma implementação do fatorial como a definição tradicional.

thingol, nao consegui enxergar sua explicacao dessa forma.

Pra mim o fatorial se resultaria apenas a multiplicacao, excluindo assim o N-1 sendo esse apenas um limitador.

Posso estar errado, enfim…

Abraços

Fabio Nascimento