如何在Scheme中实现bignum,给出以下语法?

时间:2012-03-01 16:34:23

标签: lisp scheme racket bignum

我认为Scheme有一个内置类型Bignum来处理任意大数字,但是如果我想自己实现它我该怎么做呢?

如果我没弄错,它有以下语法: | N |当n = 0时=() | N | =(r。| q |)其中n = qN + r,0 <= r

N = base
r = remainder
q = quotient

E.g。当基数N = 16时,| 33 | =(1 2)wher 1是余数,2是商。

PS:使用bignum实现我怎样才能转到下一个号码(后继号码)和前一个号码(前一个号码),例如successor |n| = |n+1|predecessor |n+1| = |n|

1 个答案:

答案 0 :(得分:5)

你很幸运。这个问题很经典。 Andre van Meulebrock撰写了一系列关于bignums(表示和相关算法)的优秀文章。该文章包含可运行的Scheme代码,因此请尝试使用他的代码。

领导MacTech的档案:

http://www.mactech.com/articles/mactech/Vol.08/08.03/BigNums/index.html