我有一個小而有趣的問題,但我不能提供一個完美的解決方案,我會很感激,如果你能幫我或給我一個提示。 的問題是:使用Lisp重印列表
給出任何列表,說像 '(美國廣播公司),我們將其轉換爲'[ABC] 或 '(A(BC)),我們將轉換爲'[A [BC]
換句話說,函數應該和LISP中的PRINT做同樣的事情,只是我們把括號改爲方括號。但是像簡單地打印到字符串然後用方括號代替括號的方法不算。 請給我一些想法,謝謝。
我有一個小而有趣的問題,但我不能提供一個完美的解決方案,我會很感激,如果你能幫我或給我一個提示。 的問題是:使用Lisp重印列表
給出任何列表,說像 '(美國廣播公司),我們將其轉換爲'[ABC] 或 '(A(BC)),我們將轉換爲'[A [BC]
換句話說,函數應該和LISP中的PRINT做同樣的事情,只是我們把括號改爲方括號。但是像簡單地打印到字符串然後用方括號代替括號的方法不算。 請給我一些想法,謝謝。
這是我的看法:
(defun bprint (object)
(typecase object
(cons
(write-char #\[)
(do ((list object (rest list)))
((endp list) (write-char #\]))
(bprint (first list))
(when (rest list)
(write-char #\Space))))
(t
(prin1 object)))
t)
那就是:遇到一個列表時,打印口支架,打印遞歸地添加內容,必要時在對象之後添加空格,然後打印右括號。用prin1打印所有非列表對象。 prin1是「生產可讀輸出」打印機。
這是一本很好的書:Practical Common Lisp。
,如果你在忙亂之中,您可能希望從這裏開始:List Processing和Format Recipes
聞起來像功課。你試過什麼了? –
THX,羅伯特 我得到了現在的代碼 (defun定義顯示列表(LST) (條件 ((和 (原子LST) (沒有(空LST))) (格式T 「〜A」 LST) ) ((空LST) (格式噸 「]」 LST)) (噸 (格式噸 「[」) (顯示列表(汽車LST)) (mapcar#'顯示列表(butlast (cdr lst))) (format t「]」)) )) – Kevin