【问题标题】:How to make an array with size received as arguments in a function in LISP? [duplicate]如何在 LISP 的函数中制作一个大小作为参数接收的数组? [复制]
【发布时间】:2013-11-01 12:17:42
【问题描述】:

我正在尝试创建一个函数,它接收许多行和列并从中创建一个数组。 这就是我所做的

(defun create-table (lines columns)
     (make-array '(lines columns)))

我认为这就是你制作多维数组的方式。但是当我调用函数create-table 例如(create-table 2 2) 时,会给出这个错误

MAKE-ARRAY:维度 LINES 不是 `(INTEGER 0 (,数组维度限制))

我不明白,怎么可能不是整数?我应该做演员吗?

【问题讨论】:

    标签: arrays lisp


    【解决方案1】:

    你认为'(lines columns) 的结果是什么?

    提示:您可以使用函数LIST 创建列表。

    【讨论】:

    • 我想做一个多维数组。 (create-table 2 2) 会像这样创建一个数组:#2A((NIL NIL) (NIL NIL)) 当我创建 make-array '(2 2)) 时会发生这种情况。我只是不明白为什么我的函数create-table不这样做
    • @FriedRike:问问你自己:你认为 '(lines columns) 的结果是什么?还有一个提示:你认为引号字符在 Lisp 中的作用是什么?
    • 引号字符表示其中的任何内容都不会被评估。但根据我的研究,这就是你制作多维数组的方式。
    • @FriedRike: 所以'(lines columns) 被评估为(lines columns)。这是一个列表,其第一个元素是符号lines,第二个元素是符号columnsMAKE-ARRAY 应该怎么做? MAKE-ARRAY 需要一个数字列表,而不是符号列表。有效的数组维度是一个固定数字,而不是一个符号。
    • 我想我明白了...我必须创建一个列表并将其作为 make-array 的参数传递。像这样? (make-array (list lines columns))
    【解决方案2】:

    你的函数有错误

    这样试试

    (defun create-table (lines columns)
     (make-array `(,lines ,columns)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 2019-05-04
      • 2019-02-19
      • 2013-03-19
      • 2011-03-23
      相关资源
      最近更新 更多