我正在尝试在 Common Lisp 中编写一个函数,以递归方式将 10 进制数转换为 8 进制数,表示为一个列表。
这是我目前所拥有的:
(defun base8(n)
(cond
((zerop (truncate n 8)) (cons n nil))
((t) (cons (mod n 8) (base8 (truncate n 8))))))
当我输入数字 < 8 和 > -8 时,这个函数工作正常,但是递归的情况给我带来了很多麻烦。当我尝试将 8 作为参数(应返回 (1 0)
)时,我收到错误 Undefined operator T in form (T)
。
提前致谢。
最佳答案
只是为了好玩,这里有一个没有递归的解决方案,使用内置功能:
(defun base8 (n)
(reverse (coerce (format nil "~8R" n) 'list)))
关于lisp - 在 Lisp 中将十进制数转换为八进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773671/