2014-12-05 54 views
0

我正在通過SICP進行工作,對於其中一項練習,我需要在列表中創建3個較大號碼中的2個列表。我試圖用sort功能,但是當我用它在函數中,我發現了一個錯誤:由於參數導致排序功能失敗的包裝程序

The object z, passed as the first argument to integer-less?, is not the correct type. 

功能是:

(define (myList x y z) 
    (drop (sort '(x y z) <) 1)) 

如果我運行它工作正常解釋器中的第二行(用變量代替實際值),但是當我嘗試使用該函數時,它會爆炸。我是新來的計劃/口授,所以我不太熟悉名單的工作方式,但我猜測它與此有關。我知道lisp使用鏈表,所以我想知道它是否與它達成最後一個元素有關並且不知道在那之後要做什麼。

任何幫助,將不勝感激!

編輯:

我只是試圖運行:

(define x 4) 
(define y 10) 
(define z 2) 
(drop (sort '(x y z) <) 1) 

,並得到了同樣的錯誤。

回答

2

'(x y z)是含有三個符號xy,和z列表。這與(list 'x 'y 'z)相同。您需要使用的是(list x y z)

使用'(4 10 2)(例如)作品的原因是數字是「自我評估」。這意味着(list '4 '10 '2)(list 4 10 2)相同。

+0

啊,非常感謝你!這解決了它。我想我需要RTFM多一點。 – 2014-12-05 06:03:01

1

除了@克里斯的解釋,這裏有一個簡單的方法,將任何數量的參數工作:

(define (myList . lst) 
    (drop (sort lst <) 1)) 

測試:

> (myList 10 1 5) 
'(5 10) 
> (myList 10 1 5 8) 
'(5 8 10) 
> (myList 10 1 5 8 -1) 
'(1 5 8 10) 
相關問題