紹介とクレジット
今日は派手なプレリュードなし:を実装してくださいtakewhile
。
これのバリエーション(非自明なデータ構造)は、大学の関数型プログラミングコースでの課題でした。この課題は現在閉鎖されており、クラスで議論されており、ここに投稿する教授の許可があります(明示的に尋ねました)。
仕様
入力
入力は、正の整数のリスト(または言語の同等の概念)になります。
出力
出力は、正の整数のリスト(または言語の同等の概念)である必要があります。
何をすべきか?
あなたのタスクは、takewhile
考慮中の数が偶数であるという述語を使用して実装することです(言語組み込みが許可されます)(テイクタイムに焦点を合わせるため)。
したがって、リストを最初から最後まで反復し、条件が(偶数)である間に出力リストにコピーし、条件を満たさない要素にヒットするとすぐに、操作と出力を中止します。 (ステップバイステップの例を以下に示します)。この高次機能は、takeWhile(takewhile
)とも呼ばれます。
潜在的なコーナーケース
入力リストに比べて出力リストの順序は、例えば、変更することはできません[14,42,2]
になってないかもしれません[42,14]
。
空のリストは有効な入出力です。
誰が勝ちますか?
これはコードゴルフなので、バイト単位の最短回答が勝ちです!
もちろん、標準ルールが適用されます。
テストベクター
[14, 42, 2324, 97090, 4080622, 171480372] -> [14, 42, 2324, 97090, 4080622, 171480372]
[42, 14, 42, 2324] -> [42, 14, 42, 2324]
[7,14,42] -> []
[] -> []
[171480372, 13, 14, 42] -> [171480372]
[42, 14, 42, 43, 41, 4080622, 171480372] -> [42, 14, 42]
段階的な例
Example Input: [42, 14, 42, 43, 41, 4080622, 171480372]
Consider first element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42]
Consider second element: 14
14 is even (7*2)
Put 14 into output list, output list is now [42,14]
Consider third element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42,14,42]
Consider fourth element: 43
43 is not even (2*21+1)
Drop 43 and return the current output list
return [42,14,42]