2017-04-13 8 views
1
にリストを分割

このコードは2つの同じサイズのリストのリストを分割しますたとえば、0.20,0.50,0.63などです。最初のリストに移動する数値(単位は%)です。ラケットは、二つの異なるサイズのリスト

+0

スプリットは、「スプリット」のように決定論的な交互の順序で行うことが重要ですか?関数が正確に達成できないときに関数がどのように数値を丸めるかについての要件はありますか? –

+0

いいえ、それが正確に達成できない場合は、数値を丸める方法は重要ではありません。ここでは、私が別の例を望む順番を維持する分割の例があるので、要素はランダムに各リストに送られます。結果として得られる2つのリストは常に異なっています。 –

答えて

0

これを行う方法の1つです。

ヘルパー機能split-atを使用する代わりに、splitという機能を使用できます。

#lang racket 

; clamp : number number -> number 
; make sure x is in the interval [a;b], 
; if not return a or b. 
(define (clamp x a b) 
    (max (min x b) a)) 


; split-list : number list -> list list 
; return two values: 
;  - appending the two lists will produce the a list equal to the input list xs 
(define (split-list pct xs) 
    ; find the position to split the list 
    (define pos (exact-round (* (clamp pct 0.0 1.0) (length xs)))) 
    ; split it 
    (split-at xs pos)) 

(split-list 0.00 '(a b c d)) 
(split-list 0.25 '(a b c d)) 
(split-list 0.50 '(a b c d)) 
(split-list 0.75 '(a b c d)) 
(split-list 1.00 '(a b c d)) 
+0

この度はありがとうございます。ここでは、私が別の例を望む順番を維持する分割の例があるので、要素はランダムに各リストに送られます。結果として得られる2つのリストは常に異なっています。どうか、助けてくれますか? –

+0

http://docs.racket-lang.org/reference/pairs.html?q=shuffle#%28def._%28%28lib._racket%2Flist..rkt%29._shuffle%29%29 – soegaard

+0

Fantastic !! !お手伝いありがとう! –

関連する問題