对于几个数学有趣的问题,我使用数字向量作为整数的表示。到目前为止,这对我来说很好。现在我想将向量转换回整数。我没有找到任何合适的开箱即用的功能,并提出了以下功能:
(defun vector->integer (vec)
"Returns a given vector of digits as an integer."
(loop :for digit :across vec
:with number-string = ""
:do (setf number-string
(concatenate 'string number-string (write-to-string digit)))
:finally (return (parse-integer number-string))))
它基本上可以满足我的需求,但我发现转换vector
到string
到integer
有点麻烦。还有什么更有效的吗?
答案 0 :(得分:4)
为什么不使用乘法而不是连接字符串?
E.g。
(loop for digit across vec
with number = 0
do (setf number (+ (* 10 number) digit))
finally (return number))
甚至更简单:
(reduce (lambda (a b) (+ (* 10 a) b)) vec)
答案 1 :(得分:3)
您的代码更简单,更有效地编写为:
(defun vector->integer (vector)
(parse-integer (map 'string #'digit-char vector)))