0

私は SICP を使用しています。演習の 1 つで、リスト内の 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))

インタープリターで 2 行目を実行すると (実際の値を変数に置き換えて) 正常に動作しますが、関数を使用しようとすると失敗します。私は scheme/lisps に慣れていないので、リストがどのように機能するかについてはあまり詳しくありませんが、それと関係があると推測しています。私は Lisp がリンクされたリストを使用していることを知っているので、最後の要素に到達し、その後何をすべきかわからないことに関係があるのではないかと考えています。

どんな助けでも大歓迎です!

編集:

実行してみました:

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

同じエラーが発生しました。

4

2 に答える 2

2

'(x y z)、、、 の3 つの記号を含むリストです。と同じです。xyz(list 'x 'y 'z)

代わりに、使用する必要があるのは(list x y z).

'(4 10 2)(たとえば)作品を使用する理由は、数字が「自己評価」であるためです。つまり と(list '4 '10 '2)同じ(list 4 10 2)です。

于 2014-12-05T05:46:15.623 に答える
1

@Chrisの説明に加えて、任意の数のパラメーターに対して機能する簡単な方法を次に示します。

(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)
于 2014-12-05T06:01:21.327 に答える