如何将数字向量转换为整数?

时间:2017-05-21 12:24:26

标签: vector common-lisp type-conversion

对于几个数学有趣的问题,我使用数字向量作为整数的表示。到目前为止,这对我来说很好。现在我想将向量转换回整数。我没有找到任何合适的开箱即用的功能,并提出了以下功能:

(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))))

它基本上可以满足我的需求,但我发现转换vectorstringinteger有点麻烦。还有什么更有效的吗?

2 个答案:

答案 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)))