我正在尝试用lisp语言编写排序代码。 但我不知道该怎么做。 我想使用序列使用lisp的sort函数。 我正在尝试创建这样的序列 -
(setq arr (make-sequence '(vector integer) 10 :initial-element (read)))
(terpri)
(write arr)
这会将初始元素设置为用户输入。但是我想从用户那里获取输入,我不知道该怎么做。任何建议都会有所帮助。
答案 0 :(得分:3)
您可以使用MAKE-ARRAY
制作矢量。您可以将其fill-pointer设置为0,然后使用循环通过VECTOR-PUSH
向其添加10个数字:
(let ((vec (make-array 10 :fill-pointer 0)))
(dotimes (i 10 vec)
(format *query-io* "Number ~d/10: " (1+ i))
(finish-output *query-io*)
(vector-push (parse-integer (read-line *query-io*)) vec)))
你也可以这样做:
(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*)))))