为什么在LISP中,数量没有限制?

Don*_*Lun 8 lisp numbers

我甚至可以计算(expt 32768 32768),我得到了:

476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656

Ted*_*opp 12

当Lisp 看到这种事情时,它会自动切换数学以使用bignum包.但是有一个限制.使你的数字足够大,你可能需要更多的位来表示它,而不是已知宇宙中的原子.那么你的系统内存可能会耗尽.:)


Ter*_*aug 9

你可以通过提出问题找到一些线索:为什么对数字的大小有限制?

限制数字大小有一些实际原因.某些其他编程语言中的数字表示与硬件体系结构紧密相关,数字的大小受处理器寄存器中位数的限制.

幸运的是,在Lisp中,您通常可以在更抽象的层面上思考,从而将程序员从如此低级别的细节中解放出来.但是这种任意精度算术通常比限制数量以适应处理器寄存器更慢.

PS:还要看看Lisp处理分数的优雅程度.不将分数转换为浮点数允许精确的算术.例如:(+ 1/3 2/7)=>13/21