prolog中给定数的阶乘

prolog中给定数的阶乘,prolog,factorial,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):-

如何在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.

您可以使用通常的Prolog方法来完成此操作—通过定义包含两个子句的递归规则:

  • 当数字为
    0
    时,其阶乘为
    1
    ——这可以通过一个简单的事实来实现
  • 当数字大于零时,计算
    number-1
    ,获得其阶乘,并将结果乘以
    number
这应该不会太难编码。您需要知道的是,算术运算使用的是
is
运算符,即
PriorNum是数字-1
结果是数字*PriorFactorial

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

factorial(0, 1).
factorial(X, R) :- N > 0, X1 is X-1, factorial(X1, S), R is S*X.
两个子句中的任何一个都不应出现输出-这应该在
run
谓词中完成

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

您可以使用通常的Prolog方法来完成此操作-通过定义包含两个子句的递归规则:

  • 当数字为
    0
    时,其阶乘为
    1
    ——这可以通过一个简单的事实来实现
  • 当数字大于零时,计算
    number-1
    ,获得其阶乘,并将结果乘以
    number
这应该不会太难编码。您需要知道的是,算术运算使用的是
is
运算符,即
PriorNum是数字-1
结果是数字*PriorFactorial

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

factorial(0, 1).
factorial(X, R) :- N > 0, X1 is X-1, factorial(X1, S), R is S*X.
两个子句中的任何一个都不应出现输出-这应该在
run
谓词中完成

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

See See really Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Thank Than。