2016-04-30 26 views
0

我想用lisp語言編寫一個排序代碼。 但我不知道該怎麼做。 我想使用序列的lisp的排序功能。 我試圖像這 -如何在SEQUENCE lisp中輸入內容?

(setq arr (make-sequence '(vector integer) 10 :initial-element (read))) 
(terpri) 
(write arr) 

此創建序列將設置爲用戶輸入初始元素。但我想從用戶那裏得到輸入,我不知道該怎麼做。任何建議都會有幫助。

回答

3

你可以使與MAKE-ARRAY載體。你可以將其填充指針設置爲0,然後使用一個循環10個號碼添加到它與VECTOR-PUSH

(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*)))) 

但創建輸入的臨時列表。

而且,斯萬認爲,你可以使用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

記住,你需要FINISH-OUTPUT如果你想I/O到達用戶。某些I/O系統可能會被緩衝。 –

+0

好點。添加。 – jkiiski

+0

你也可以使用'map-into'來代替填充指針和'vector-push'。 – Svante

相關問題