You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Common Lisp中指定Fixnum类型的Vector作为函数类型?

Common Lisp 函数类型精确限定问题解答

完全可以用(vector fixnum)替代sequence,以此更精确地限定函数的返回类型为仅包含Fixnum元素的向量。

注意原代码的问题

原示例中的#(n)是字面量向量语法,其中的n会被解析为符号而非变量n的值,因此实际返回的是包含符号的向量,并不符合(vector fixnum)的类型要求,需要调整向量的构造方式。

修正后的代码示例

;; 精确声明函数参数为fixnum,返回值为fixnum类型的向量
(declaim (ftype (function (fixnum) (vector fixnum)) abc))

(defun abc (n)
  ;; 用vector函数构造包含变量n值的向量
  (vector n)
  ;; 若要强制向量的元素类型为fixnum,也可以用make-array明确指定
  ; (make-array 1 :element-type 'fixnum :initial-element n)
)

验证类型正确性

可以通过typep函数验证返回值是否符合预期类型:

(typep (abc 42) '(vector fixnum))
;; 返回 T

进阶类型限定

如果需要更严格的约束,比如限定向量的长度,还可以使用带长度参数的类型 specifier,例如(vector fixnum 1)表示长度为1的Fixnum向量:

(declaim (ftype (function (fixnum) (vector fixnum 1)) abc))

内容的提问来源于stack exchange,提问作者christian wuensche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:32:12