如何将整数与LISP中的数组值进行比较

时间:2017-12-05 07:29:50

标签: syntax-error lisp common-lisp

我正在尝试编写一个程序,它接受单个整数的用户输入,然后是整数列表,然后输出值在数组中匹配的索引。

例如:

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上度过艰难时期,我们将非常感谢所有人。

0 个答案:

没有答案