LISP - 迭代数组 - MAPCAR

0 lisp arrays iteration common-lisp

我在 SO 和书籍上找到了很多资源,但没有一个对我来说是可以理解的(足够的)。我正在尝试使用 LISP 迭代数组。

这是我创建数组的方法:

(setf question-array
      (make-array '(8 2)
                  :initial-contents
                  '((1 "How old are you:")
                    (2 "Whats your name:")
                    ...)))
Run Code Online (Sandbox Code Playgroud)

但经过一些研究,看起来我应该使用:

(mapcar (lambda (x)
          (print))
        '(question-array))
Run Code Online (Sandbox Code Playgroud)

但它只打印:

QUESTION-ARRAY
Run Code Online (Sandbox Code Playgroud)

我想打印每个问题。所以我猜#'第二?我缺少什么?

(更多背景信息:我的目标是向用户提出问题并以某种方式存储答案以在最后计算分数。)

多谢 !

sds*_*sds 7

  1. mapcar只适用于lists,不适用于vectors
  2. 你没有传递xprint你的lambda
  3. 引用的 (question-array)是所以该函数未被调用 - 但它不是一个函数,它是一个变量!

迭代vector使用map

(setq question-vector (vector "question 1" "question 2" ...))
(map nil #'print question-vector)
Run Code Online (Sandbox Code Playgroud)

或者dotimes

(dotimes (i (length question-vector))
  (print (aref question-vector i)))
Run Code Online (Sandbox Code Playgroud)

或者loop

(loop for q across question-vector
  do (print q))
Run Code Online (Sandbox Code Playgroud)

question-array实际上是 2 维array而不是 a vector(所以它不是 a sequence,并且map无法帮助您)。

相反,你可以这样做

(dotimes (i (array-dimension question-array 0))
  (print (aref question-array i 1)))
Run Code Online (Sandbox Code Playgroud)