陣列

陣列 在 Common Lisp

15 個練習

關於 陣列

陣列是 Common Lisp 中非常常見的資料型態。 它們由一連串的 cons 格組成。 每個car都是陣列中的一個元素,而每個cdr則是下一個 cons 格或一個結尾的原子。

以空陣列結尾的陣列稱為「正規陣列」。

以不是空陣列的原子結尾的陣列稱為「點狀陣列」(這是根據它的列印方式而來:(cons 'a 'b) ;=> (a . b))。

如果陣列中某個 cons 格的cdr是它後面的某個 cons 格,這個陣列也會是環狀的。 例如:(let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done)。 處理環狀陣列時要小心,因為如果沒有把*print-circle*綁定到t就讓它們被列印出來,會造成無限迴圈,並讓 REPL 卡死(在這個例子中,因為對write指定了:circle t,所以*print-circle會被綁定到t)。

合併陣列

你可以用任意數量的陣列來呼叫append,包括 1 個或 0 個:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

除了append之外,還有nconc,它的結果相同,但會有修改陣列的副作用。使用nconc時要小心,因為它可能造成意想不到的效果。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 陣列

練習已鎖定

再解鎖 5 個練習,就能練習 陣列