私はハスケルにとってとても新しいので、私は数日前に私が持っているコースでハスケルを学び始めました。このコースには、私が現時点で抱えている課題や宿題があります。これは宿題なので、私の問題のヒントや解説は完全ではっきりとした答えよりも高く評価されます。そのようなものとして、私は別の仕事に賞賛したくありません。Haskell - さまざまな種類のリストをシャッフルしますか?
割り当ては、シャッフル関数(skyffla
)を書き込むことです。実際のシャッフルは私が理解を助ける必要があるのではなく、アルゴリズムが渡すべきテストの1つです。あまり重要でないことを示すために、シャッフルセクションにアルゴリズムをカッコでマークします。
全ての奇数のインデックスが採取されるまで、ように最初の要素、第三の要素、第5要素とをとり、その後、リストにそれらを追加することによって(skyffla
シャッフル。
第一の残りの要素その後、同じ方法で処理され、最初に処理されたリストに追加され、最後に1つの要素が残されて最後にリストに追加されるまで続きます。
入力例:
skyffla [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
それは私を与える:
1: _[1, 3, 5, 7, 9, 11] ++ skyffla ([2, 4, 6, 8, 10, 12])_
2: _[1, 3, 5, 7, 9, 11] ++ [2, 6, 10] ++ skyffla ([4, 8, 12])_
3: _[1, 3, 5, 7, 9, 11, 2, 6, 10] ++ [4, 12] ++ skyffla([8])_
(4): _[1, 3, 5, 7, 9, 11, 2, 6, 10, 4, 12, 8]_
これは私のコードはまったく同じもので、実際のシャッフルは、それが意図されて同じように働いています。 。[3.4, 2.3, 5, 185, 23]
をして返す:_[3.4, 5, 23, 2.3, 185]_
をしかし、だから私が述べた、私は私の現在の実装に渡すことはできません一つの試験がある)
として、試験の一つはskyfflaがとるべきです。私が持っているコードで
、私が取得:_[3.4, 5.0, 23.0, 2.3, 185.0]_
これは、がたに追加される「0.0" 以外185、と正しいです。
これはなぜですか?
代わりに "5.0"が代わりに "5"と表示されるようにするにはどうすればよいですか?次のように
私のコードが見えます:
skyffla :: [a] -> [a]
skyffla [] = []
skyffla xs
| length xs == 1 = xs
| otherwise = dropUnevenElements xs ++ skyffla newList where
newList = takeUnevenElements xs
dropUnevenElements :: [a] -> [a]
dropUnevenElements [] = []
dropUnevenElements (x:y:xs) = x:dropUnevenElements xs
dropUnevenElements x = x
takeUnevenElements :: [a] -> [a]
takeUnevenElements [] = []
takeUnevenElements (x:y:xs) = y:takeUnevenElements xs
takeUnevenElements x = []
'dropUnevenElements x = x'? –
リストには1つのタイプの要素しか含めることができません。 –
'skyffla'は 'シャッフル'の奇妙な表音訳ですか?それは本当に「blanda」のようなものでなければなりません。 – SwiftsNamesake