2017-03-14 2 views
1

minが常にリストの外側になるようなリストを作成する必要があります。リストが最小化され、リストからスキーム内で再帰的に分離されるようにリストを作成しますか?

入力(1 2 3)

ここ出力(1(2))

iは程度たい、数字は降順であると仮定し、私のコードであります後で一般的な場合に。

(3 2 1 0 -1 -2 -3())の予期しない出力が表示されています。

どのように私はどのようなアイデアでこれを達成するのですか?

(if?null?(cdr L))(let((x)))(cons x '())) (let * (rem-list(cdr ret-ans))) (cond(cond-list))(cond-recs) ((> CUR-elemはミニ)(CUR-elemは短所(デメリットミニレムリスト)))))))

+0

トラブルコードがある –

+0

を抱えているの正確な部分を指して、あなたがこれまでに書いたコードを投稿してください(定義(find-min-rest L) (if(null?(cdr L))(let *(car L)))(cons x '(())) (cond((> cur-elem(car-elem(car-elem)))(cur-elem(car L))ミニ)(cons cur-elem(cons mini rem-list))))))))))) – user1922

答えて

0

を使用すると、組み込みの使用している場合はそれが簡単になりますプロシージャを実行し、問題を部分的に分割します。以下は、単一の最小があることを前提とし、必要に応じて調整注意してください:

(define (find-min-rest L) 
    (let* ((the-min (apply min L)) 
     (the-rest (remove the-min L))) 
    (list the-min the-rest))) 

(find-min-rest '(1 2 3)) 
=> '(1 (2 3)) 
0

コード

(define (find-min-rest L) 
    (if (null? (cdr L)) (let ((x (car L))) (cons x '(()))) 
     (let* ((ret-ans (find-min-rest (cdr L))) (cur-elem (car L)) (mini (car ret-ans)) (rem-list (cdr ret-ans))) 
      (cond ((> cur-elem mini) (cons cur-elem (cons mini rem-list))))))) 
関連する問題