gpt4 book ai didi

common-lisp - 区分整数和字符串向量

转载 作者:行者123 更新时间:2023-12-04 16:36:25 24 4
gpt4 key购买 nike

我正在尝试根据数组类型进行分派(dispatch)。这是一个测试用例:

(defun column-summary2 (column)
(typecase column
(simple-double-float-vector (format t "Column is a simple-double-float-vector~%"))
;; (simple-integer-vector (format t "Column is a simple-integer-vector~%"))
;; (simple-string-vector (format t "Column is a simple-string-vector~%"))
((simple-array string (*)) (format t "~A Column is a string-array~%" column))
((simple-array float (*)) (format t "~A is a simple-float-array~%" column))
((simple-array integer (*)) (format t "~A is a simple-float-array~%" column))
(bit-vector (make-bit-vector-summary :length (length column) :count (count 1 column))))))

对于内置类型 bit-vector 和我自己的 simple-double-float-vector 类型,这按预期工作:

(deftype simple-double-float-vector (&optional (length '*))
"Simple vector of double-float elements."
`(simple-array double-float (,length)))

但字符串和整数失败:

LS-USER> (df::column-summary2 #("foo" "bar" "baz"))
#(foo bar baz) Column is a string-array
NIL
LS-USER> (df::column-summary2 #(1 2 3))
#(1 2 3) Column is a string-array

我尝试为这两个定义类型:

(deftype simple-integer-vector (&optional (length '*))
"Simple vector of integer elements."
`(simple-array integer (,length)))

(deftype simple-string-vector (&optional (length '*))
"Simple vector of integer elements."
`(simple-array string (,length)))

编辑:强制似乎也失败了:

CL-USER> (type-of (coerce #(4 4 1 1 2 1 4 2 2 4 4 3 3 3 4 4 4 1 2 1 1 2 2 4 2 1 2 2 4 6 8 2) '(simple-array integer (32))))
(SIMPLE-VECTOR 32)
CL-USER> (type-of (coerce #("foo" "bar" "baz") '(simple-array string (3))))
(SIMPLE-VECTOR 3)

但这并没有帮助。似乎 integerstring 总是混为一谈。谁能看出原因?

最佳答案

typecase只能区分实现上不同的类型,integer 的数组不太可能s 和 strings是。您可以通过以下方式进行测试:

(eq (upgraded-array-element-type 'integer)
(upgraded-array-element-type 'string))

这很可能会返回 t .事实上很可能是 upgraded-array-element-type这两种类型本身就是 t : 最专业的数组,可以存储一般 string和能存一般的一样integer ,因为这两种类型都确实需要数组的元素是通用指针。

这里的问题是当typecase看到一个数组,它可以分派(dispatch)的所有内容都是数组的实现类型,而不是其他任何类型,这两种类型在许多情况下是相同的,但它们在概念上并不相同。

关于common-lisp - 区分整数和字符串向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69432305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com