我正在尝试编写一个程序,它接受单个整数的用户输入,然后是整数列表,然后输出值在数组中匹配的索引。
例如:
Enter integer X: 5
Enter list of Integers i1 i2 i3 ...): 1 2 5 5 3
因为我将输入列表值的数组传递给函数array-compare,并尝试将值推送到全局定义的数组' resultArray'。
(format t "Enter integer X: ")
(defvar X (read))
(format t "Enter list of Integers i1 i2 i3 ...): ")
(defvar input (read-line))
(defvar L (string-trim '(#\Space #\Tab #\Newline) input))
(defun read-array (L)
(with-input-from-string (in L)
(loop for x = (read in nil nil) while x collect x))
)
(defun list-to-array (list)
(make-array (list (length list))
:initial-contents list))
(setf numList (read-array L))
(setf numArray (list-to-array numList))
(setf resultArray (make-array (length numArray) :fill-pointer 0))
(defun array-compare (arr)
(loop for y in arr
do((if (= y X)
(vector-push y resultArray)))))
(format t "~a" (array-compare numArray))
预期输出:(3,4)
我一直收到错误
Badly formed lambda: (IF (= Y X) (VECTOR-PUSH Y RESULTARRAY))
我知道它与语言的陈述性有关,而且它可能是我忽略的明显的东西。我也意识到,代码只会打印元素,而不是它们的索引,但我试图首先将元素作为概念证明。我非常精通面向对象语言,但是在LISP上度过艰难时期,我们将非常感谢所有人。