我需要一個將多個值連接成(簡單)向量的函數,類似於(concatenate)
。但是,不像concateate,它應該能夠處理不是向量或序列的參數。Common Lisp:將多個值連接成矢量
I.e.它應該像這樣工作:
(concat #(1 2) 3) => #(1 2 3)
(concat 1 2 3) => #(1 2 3)
(concat 1 #(2 3 4)) => #(1 2 3 4)
(concat #(1 2) 2 #(3 4 5)) => #(1 2 3 4 5)
我該怎麼做?我想我已經忘記了一些讓它成爲可能的微不足道的lisp構造。
據我所知,concatenate不能這樣做。我不太清楚如何使用它與宏(有,@
構造,將列表插入到生成的lisp表單中,但我不太清楚在這種情況下如何區分非序列和序列)。
請注意,這是一個**二次**算法來解決**線性**問題。 – sds 2013-02-17 18:09:54
OP寫道「類似於'concatenate'」。因爲concatenate是一個非破壞性的函數,所以我提供了一個非破壞性的解決方案。如果你不需要保留原始矢量,並且你想要一個線性算法,那麼你可以在lambda中使用'append'。 – Haile 2013-02-17 18:13:34
我的線性解決方案也是非破壞性的。你的解決方案的問題是你將兩個參數串聯起來。 – sds 2013-02-17 18:15:58