给定n位整数和m位整数.如何使用列表,数组或任何其他特定于lisp的数据类型在LISP中将它们相乘?
例如;
一(1)(2)... A(N)
B(1)B(2)... B(M)
结果;
R(1)R(2)... R(M + N)
Common Lisp本身已经是bignums.你为什么不用它们?
你基本上不必特别申报任何东西,他们"神奇地"发生:
% sbcl
This is SBCL 1.0.56.0.debian, an implementation of ANSI Common Lisp.
* (defun fact (n) (if (< n 1) 1 (* n (fact (- n 1)))))
FACT
* (fact 50)
30414093201713378043612608166064768844377641568960512000000000000
Run Code Online (Sandbox Code Playgroud)
所以使用Common Lisp,你基本上不必费心......
高效的bignum算法是一个非常困难的问题 ; 高效的算法比天真的算法具有更好的复杂性; 你可以找到解释它们的困难书籍(基础数学很难).另见这个答案.
如果你想要有竞争力的bignum实施,准备好工作几年,并使其成为博士论文.