【发布时间】:2023-03-12 17:00:01
【问题描述】:
我知道在 Prolog 中提出了关于阶乘函数的问题。我在人们提供的答案中发现了很多代码。但我的问题是,我为事实编写了两个代码。第一个函数仅适用于fact(1,X),fact(2,X),fact(3,X)。从 4 开始,结果为false。我想知道这个函数事实背后的逻辑,以及为什么它无法为大量数字提供结果。
fact(1,1).
fact(N,F):-fact(N1,F1),N is N1+1,F is F1*N,!.
fact1(1,1).
fact1(N,F):-N>1,N1 is N-1,fact1(N1,F1),F is F1*N.
?- fact(2,X).
X = 2.
?- fact(3,X).
X = 6.
?- fact(4,X).
false.
?- fact(5,X).
false.
?- fact(15,X).
false.
fact1 函数给出了完美的答案,
?- fact1(5,X).
X = 120 ;
false.
?- fact1(50,X).
X = 30414093201713378043612608166064768844377641568960512000000000000 ;
我想知道fact() 函数逻辑上有什么问题。您还可以对fact() 进行轻微修改,使其工作。我怀疑这可能是因为剪切(!),他们说这是 Prolog 中的冒险目标。
【问题讨论】: