2016-09-21 49 views
0
排序子列表清單

所以,我有表結構如下:保留表結構與用Lisp

(defparameter *list* '( ((2 2 2) (0.1)) 
          ((5 5 5) (0.4)) 
          ((1 1 1) (1.2)) 
          ((3 3 3) (3.4)) 
          ((4 4 4) (4.5))) 

我想對它進行排序它因此,這裏是返回

'(((1 1 1) (1.2)) 
    ((2 2 2) (0.1)) 
    ((3 3 3) (3.4)) 
    ((4 4 4) (4.5))) 

輸出我嘗試:

(sort *list* 
     #'(lambda (a b) 
      (< (squared a '(0 0 0)) 
      (squared b '(0 0 0)))) 
     :key #'first) 

凡平方發生在兩個列表,並計算每個元件的距離平方和對其求和(即(平方'(1 2 3)'(0 3 5))=> 48))

我按照子列表'(###)的第一個元素對列表進行排序並計算距離從'(0 0 0)開始,然後按該距離排序。

但我嘗試將輸出以下=>((1) (1 1 1) (2) (3) (2 2 2) (4) (5) (3 3 3) (4 4 4) (5 5 5))

如何排序方式「(###),而且還保存列表結構?還使用Common Lisp!

謝謝!

編輯

我已經鍵入lisp錯誤,但正確地進入此論壇。我已鍵入列表作爲以下

(defparameter 列表「((2×2 2)(0.1) (5 5 5)(0.4) (111)(1.2) (3 3 3) (3.4) (4 4 4)(4.5)))

回答

4

小心:sort可能會破壞輸入數據。這裏顯示的輸入包含文字數據。修改文字數據具有未定義的後果。使用copy-treecopy-list從文字數據創建非文字。

1

其實我第一次嘗試的作品!我只是輸入列表不正確(忘記了一些括號)。所以它排序並維護結構!