LISP:How 从用户那里读取数字并存储为列表

LISP:How to read numbers from user and store as a list

我是 lisp 的新手。我正在尝试从用户那里读取数字并将其存储为列表。例如:如果用户输入 1 2 3 4 5,则列表将包含 5 个元素 (1 2 3 4 5)。我试过 (parse-integer(read-line) :junk-allowed t) 但它 returns 只是第一个元素。我应该怎么做?谢谢

使用read

最简单的选择是要求用户输入列表(带括号)然后调用 (read)

第二种选择是自己放括号:

(read-from-string (concatenate 'string "(" (read-line) ")"))

安全保障

请注意,在提示时 Lisp reader can put you in trouble. E.g., if the user types #.(start-ww3) 而不是 (1 2 3) 的威力,您可能无法及时到达防空洞。

这意味着当在您无法控制的文本上调用 read 时,您 必须 *read-eval* 绑定到 nil

重复调用parse-integer

最后可以循环调用parse-integer

(defun parse-integers (s &optional (start 0))
  (loop with num do 
    (setf (values num start) (parse-integer s :start start :junk-allowed t))
    while num collect num))

或递归:

(defun parse-integers (s &optional (start 0))
  (multiple-value-bind (num end) 
      (parse-integer s :start start :junk-allowed t)
    (and num (cons num (parse-integers s end)))))