如何在lisp中按顺序输入?

如何在lisp中按顺序输入?,lisp,common-lisp,sequence,Lisp,Common Lisp,Sequence,我正在尝试用lisp语言编写排序代码。 但我不知道怎么做。 我想使用lisp的排序函数使用序列。 我正在尝试创建这样的序列- (setq arr (make-sequence '(vector integer) 10 :initial-element (read))) (terpri) (write arr) 这将把初始元素设置为用户输入。但我想从用户那里获取输入,但我不知道如何做到这一点。任何建议都会很有帮助。您可以使用创建向量。您可以将其填充指针设置为0,然后使用循环向其添加10个数字

我正在尝试用lisp语言编写排序代码。 但我不知道怎么做。 我想使用lisp的排序函数使用序列。 我正在尝试创建这样的序列-

(setq arr (make-sequence '(vector integer) 10   :initial-element (read)))
(terpri)
(write arr)
这将把初始元素设置为用户输入。但我想从用户那里获取输入,但我不知道如何做到这一点。任何建议都会很有帮助。

您可以使用创建向量。您可以将其填充指针设置为0,然后使用循环向其添加10个数字:

您也可以通过以下方式实现相同的目标:

(make-array 10 :initial-contents
            (loop
               for i from 1 to 10
               do (format *query-io* "Number ~d/10: " i)
               do (finish-output *query-io*)
               collecting (parse-integer (read-line *query-io*))))
但这会为输入创建一个临时列表

此外,正如Svante所建议的,您可以使用
MAP-INTO

;; If you don't want the number in the prompt, you can remove the LET
(let ((i 0))
  (map-into (make-array 10)
            (lambda () 
              (format *query-io* "Number ~d/10: " (incf i))
              (finish-output *query-io*)
              (parse-integer (read-line *query-io*)))))
你可以用它来做向量。您可以将其填充指针设置为0,然后使用循环向其添加10个数字:

您也可以通过以下方式实现相同的目标:

(make-array 10 :initial-contents
            (loop
               for i from 1 to 10
               do (format *query-io* "Number ~d/10: " i)
               do (finish-output *query-io*)
               collecting (parse-integer (read-line *query-io*))))
但这会为输入创建一个临时列表

此外,正如Svante所建议的,您可以使用
MAP-INTO

;; If you don't want the number in the prompt, you can remove the LET
(let ((i 0))
  (map-into (make-array 10)
            (lambda () 
              (format *query-io* "Number ~d/10: " (incf i))
              (finish-output *query-io*)
              (parse-integer (read-line *query-io*)))))

请记住,如果希望I/O到达用户,则需要完成输出。某些I/O系统可能会被缓冲。您也可以使用
映射到
而不是填充指针和
向量推送
。请记住,如果您希望I/O到达用户,则需要完成输出。某些I/O系统可能会被缓冲。您也可以使用
映射到
,而不是填充指针和
向量推送