如何在LISP中使用数组 - 找到最小值

时间:2016-09-14 01:32:13

标签: arrays lisp

我对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的工作。另外请指出我的逻辑是否有缺陷,因为这种新语言与我之前使用过的语言非常不同。非常感谢任何和所有的帮助!

1 个答案:

答案 0 :(得分:0)

您的defun表单中存在语法错误。具体来说,你已经在一组括号中包裹了defun的主体。这是不正确的。 defun的形式是:

(defun NAME (ARGS) [DOCUMENTATION] BODY)

(CLHS参考)。

身体将是一系列形式;你在括号中包装了一系列表格,这使编译器/解释器感到困惑。

(在语法正确的代码之前,我不会评论样式。)