【发布时间】:2016-11-05 17:14:17
【问题描述】:
我有:一个包含值列表的列表,例如
(List (list 1 2) (list 3 4 5) (list 1))
注意:它是二维数组,所以我不能得到这样的结构:(LIST (LIST (LIST 1))),换句话说,二级列表中只能有数字\字母。
我想要:创建一个函数,这将使我的列表具有相同数量的列,使用 nil 填充空字段,所以如果我有上面的列表作为输入,我的输出将是:
((1 2 nil nil)
(3 4 5 nil)
(1 nil nil nil))
对不起,它必须简单,但我是 Lisp 和函数式编程的新手。
注意:我只能使用 CONS 和 APPEND,但是(这是我的主要问题)CONS 会将每个元素放在不同的列表中,而 APPEND 将删除所有 nil。
UPD:我已经按照下面所说的做了,但是我还有 1 个问题
(DEFUN FINDMLENGTH (INPUT)
(COND
((NULL INPUT) NIL)
(T (AND
(COND ((< MAXLENGTH (length (CAR INPUT))) (SETQ MAXLENGTH (length (CAR INPUT)))))
(FINDMLENGTH (CDR INPUT))))))
(DEFUN MAKESQUARE (INPUT RowNumb) (prog (a))
(COND
((NULL INPUT) NIL)
(T (AND
(SETQ SqMatr (APPEND SqMatr (LIST (append (car INPUT) (make-list (- RowNumb (length (CAR INPUT))))))))
(MAKESQUARE (CDR INPUT) RowNumb)))))
(SETQ SqMatr nil)
(SETQ MAXLENGTH 0)
问题是我目前正在使用全局变量来传递数据,有人可以澄清我如何让它们自己返回变量吗?
【问题讨论】:
-
为什么在您的示例中每个内部列表有 4 个元素?它是作为输入给出的吗?
-
这是一个示例,说明输入可以是什么,行数和列数未定义。
标签: common-lisp