我对LISP很新,并且在使用操作数组时遇到了一些麻烦。资源不多,因为它似乎更广泛地使用了列表。我有以下代码,我试图通过一个数组查看并返回最小值出现的位置(我不知道我的格式是否正确):
(defun FIND-MIN(x)
(setq ctr (aref x 0)) (setq pos 1) (setq finalpos 1)
(loop while (< pos (array-total-size x))
do
(
(if (< ctr (aref Z pos))
(progn
(setq ctr pos)
(setq finalpos pos))
(incf pos)
)
)
finalpos
)
我的理由是首先创建一些变量,ctr默认设置为第一个位置并跟踪最小值,位置计数器(pos)跟踪我在数组中的位置,以及最终值用于存储最小值出现位置的变量。然后我将循环直到pos到达数组的末尾。在每一步,它检查元素是否小于ctr,如果是ctr,则更新并更新finalpos。然后增加pos以继续阵列。检查完每个元素后,程序将返回finalpos,它应该是最小元素的位置。
我从中得到的错误是:
- SYSTEM ::%EXPAND-FORM :( SETQ CTR(AREF X 0))应为lambda表达式
我认为我不需要lambda表达式,因为aref只是抓取一个值(第一个)并且拉出单个值是aref的工作。另外请指出我的逻辑是否有缺陷,因为这种新语言与我之前使用过的语言非常不同。非常感谢任何和所有的帮助!
答案 0 :(得分:0)
您的defun
表单中存在语法错误。具体来说,你已经在一组括号中包裹了defun的主体。这是不正确的。 defun
的形式是:
(defun NAME (ARGS) [DOCUMENTATION] BODY)
(CLHS参考)。
身体将是一系列形式;你在括号中包装了一系列表格,这使编译器/解释器感到困惑。
(在语法正确的代码之前,我不会评论样式。)