prolog 如何能够如此快速地递归执行大型计算操作?像 10000 阶乘

问题描述

为什么 prolog 在这样的数值计算中如此快速和准确

factorial(X,N) :- N = 0,X is 1;
                   N > 0,N1 is N - 1,factorial(X1,N1),X is X1 * N.

我输入了factorial(X,10000).,答案是如此准确和快速,这是一个太长的数字。 那么 prolog 是怎么做到的呢?,里面的数字的数据结构是什么?以及如何在 C、C++、C# 和 Java 等语言中实现它?

解决方法

如果您的问题是关于“大数”,则会使用适当的“大数”库。

例如,SWI-Prolog 使用“GNU 多精度库”:

...虽然它不提供“十进制数”(没有人想在 Prolog 中计算货币金额吗?)

OTOH 确实提供非整数有理数

您将在 C 或 C++ 中进行类似的操作。

对于 Java,请使用标准的 BigIntegerBigDecimal 实现。我确定 C# 中也存在同样的情况。