代码之家  ›  专栏  ›  技术社区  ›  Andrew S.

defparameter的用法

  •  1
  • Andrew S.  · 技术社区  · 7 年前

    所以,这是一个奇怪的错误。我从以下几点开始:

    (defparameter *x* #(1 4 7))
    (defparameter *y* #(2 3 55))
    

    (defparameter *res* (make-array * :adjustable t :fill-pointer 0))
    

     The value                                                                       
     *Y*                                                                           
     is not of type                                                                  
     (OR (MOD 4611686018427387901) CONS NULL)                                      
     when binding SB-VM::DIMENSIONS
        [Condition of type TYPE-ERROR]
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    * 计算为最后一个计算值,即 那个 符号 *Y* ,这是一个数组 #(2 3 55) .

    但是 make-array 创建:

    生成数组 尺寸和;关键元素类型初始元素初始内容
    可调填充指针移位到移位索引偏移

    => 新建数组

    参数和值:

    指示符 为了一个 列表 属于 有效数组维度 .

    列表 .

    (我的)。有些清单是 null s、 有些是 cons 锿。但不是 符号。

    因为它需要一个列表 designator ,即。

    非零原子 (表示 单例列表 谁的 要素 )或者 正确的列表

    另一种可能是整数。

        2
  •  4
  •   Rainer Joswig mmmmmm    7 年前
    CL-USER 28 > (defparameter *y* #(2 3 55))
    *Y*
    
    CL-USER 29 > *
    *Y*
    

    *

    在你的情况下,价值是 *y* -一个符号。然后你打电话来 MAKE-ARRAY 以这个符号作为第一个参数。 组成阵列 不需要符号-因此错误:

    The value                                                                       
     *Y*                                                                           
     is not of type                                                                  
     (OR (MOD 4611686018427387901) CONS NULL)                                      
     when binding SB-VM::DIMENSIONS
        [Condition of type TYPE-ERROR]
    

    *是的* *是的* 是评估的结果 *

        3
  •  3
  •   zut    7 年前

    关于 mod 在错误消息中,这是一个类型说明符: (mod 4611686018427387901) 表示“0到4611之间的整数…”,大的数字是 array-dimension-limit