【发布时间】:2017-12-06 00:40:50
【问题描述】:
如何将列表转换为字符串?我正在尝试使用 parse-int 获取数字列表并将它们转换为十进制,但我最终收到一条错误消息,提示“控制字符串必须是字符串,而不是(内容)”。 我正在使用格式,但我不确定我是否使用不正确。
这是我的代码:
(princ "Enter a or list of hexadecimal numbers: ")
(setq numList (read-from-string (concatenate 'string "(" (read-line) ")")))
(defun hextodec(nums)
(setq numString (format "%s" nums))
(setq newNum (parse-integer numString :radix 16))
(write nums)
(princ " = ")
(write newNum)
) ;This will format the number that the user enters
(hextodec numList)
【问题讨论】:
-
"%s" 在 Lisp 中无效。您还使用了许多未声明的变量,例如 numList、numString、newNum。您也错过了在打印后清除输出缓冲区。请参阅 FINISH-OUTPUT。
-
基本的字符串打印指令是
~a(美学)。 basic string formatting. -
也许你习惯了 Clojure 的格式?正如其他人所指出的,Lisp 格式(以及来自 pretty-print 模块的 Clojure cl-format 函数)将是(格式 nil "~s")。在另一个问题上,似乎 hextodec 认为它的输入在一个地方是一个列表,而在另一个地方是一个十六进制字符串。
-
@RainerJoswig
"%s"在 Common Lisp 的format中无效,但在 Emacs Lisp 的format中有效。然而,这被标记为common-lisp,所以这似乎没有实际意义。
标签: lisp common-lisp