lisp - 在 Lisp 中将十进制数转换为八进制数

标签 lisp decimal common-lisp octal

我正在尝试在 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/

相关文章:

c# - 查找整数的集合位

python - Python 变量前的加号有什么作用?

common-lisp - 如何从 Common Lisp 中的函数符号中获取函数表达式?

lisp - 循环遍历字符串

list - 如何比较 Lisp 中的两个列表

list - 如何找到多级列表的长度?

C# 十进制数据类型性能

recursion - 编写一个递归 LISP 函数,计算两个相同长度数字列表的点积

lisp - 如何在 Windows 10 中安装 lisp sdl(无法加载外部库(LIBSDL2)。打开共享对象时出错 "SDL2.dll":)

python - 您的语言在实践中对 unicode 的支持程度如何?