我正在关注《光线追踪挑战》这本书。我创建了一个 vector3 和 color defstruct
(defstruct (vector3
(:conc-name nil)
(:constructor v3 (x y z w)))
(x 0.0 :type float)
(y 0.0 :type float)
(z 0.0 :type float)
(w 0.0 :type float))
(defstruct (colors
(:conc-name nil)
(:constructor colors (r g b w)))
(r 0.0 :type float)
(g 0.0 :type float)
(b 0.0 :type float)
(w 0.0 :type float))
以及其他一些函数,如比例乘数
(defun vector-scalar (s v1)
(vector3 (* s (x v1))
(* s (y v1))
(* s (z v1))
(* s (w v1))))
但是当我尝试加载文件时出现以下错误
caught WARNING:
; Derived type of COMMON-LISP-USER::V1 is
; (VALUES COMMON-LISP-USER::VECTOR3 &OPTIONAL),
; conflicting with its asserted type
; COMMON-LISP-USER::COLORS.
; See also:
; The SBCL Manual, Node "Handling of Types"
我认为程序内部的任何内容都具有局部作用域,所以我不明白为什么我认为是函数输入的内容会与 混淆defstruct
。如果我只加载向量,defstruct
则不会出现错误。
我担心的是,defstruct
我创建的任何具有四个参数的东西都会与 vector3 混淆
我不知道如何解决这个问题,因为我实际上不明白到底哪里出了问题。