在prolog中给定数字的阶乘

时间:2014-11-25 21:28:07

标签: prolog factorial

如何通过给定的数字在prolog中进行因子分析?

run:-write('This is a Prolog program that find the factorial of a number'),
start.
start:- nl,nl,write('Please enter the number X = '),read(X),
enterd(X). 
enterd(0):-
write('The factorial of a 0 is '),write('1'),nl.
enterd(X):-
X1 is X-1,
entered(X1,S),
R is S*X,

write('The factorial of the number is'),write(R),nl.

1 个答案:

答案 0 :(得分:3)

您可以使用通常的Prolog方式 - 通过定义涵盖两个子句的递归规则:

  • 当数字为0时,其阶乘为1 - 这可以通过一个简单的事实来完成。
  • 当数字大于零时,请计算Number-1,获取其阶乘,然后将结果乘以Number

这不应该太难编码。您需要知道的是,算术运算使用is运算符,即PriorNum is Number - 1Result is Number * PriorFactorial

您的entered/1谓词看起来像是一次尝试。但是,您应该将其重新编写为factorial/2,第一个参数表示输入,第二个参数表示谓词的输出。

两个子句中都不应该输出任何内容 - 这应该在run谓词中完成。

factorial(0, 1).
factorial(X, R) :- N > 0, X1 is X-1, factorial(X1, S), R is S*X.

Demo.