2017-03-10 4 views
3

ハスケルの初心者として、私は3つの整数から最小の数字を見つけるコードを書こうとしています。これは私がこれまで持っていたものです。誰かが正しい方向に私をプッシュできますか?ハスケルで3つの整数の中で最小のものを見つける方法はありますか?

smallest :: Int -> Int -> Int -> Int 
smallest a b c = min a b c 
+1

これが可能な実装であれば、「最小」を定義する必要はありません。最小の番号を見つける必要がある場所で、ちょうどちょうど「分」だけです。 – leftaroundabout

答えて

9

min機能は、あなたのコードがコンパイルされない理由です、二つの引数を受け入れます。しかし、あなたは二回minを呼び出すことができます。

smallest :: Int -> Int -> Int -> Int 
smallest a b c = min a (min b c) 

をあなたはそれを2回呼び出すと不満足とより簡潔なソリューションが必要な場合、あなたはminimum機能を使用することができます。それはリストを受け取り、その最小値を返します。Zhekaのコード@

smallest :: Int -> Int -> Int -> Int 
smallest a b c = minimum [a, b, c] 
+1

中小バージョンの ''最小bc = a'min'b'min'c''もかなりいい感じです。 –

5

は、3つの数字のために正常に動作し、あなたがこれまで以上に必要に応じて、それはmin a (min b c)はちょうど倍のように見えることに気づくために十分だ:

smallest a b c = foldl1 min [a, b, c] 
+6

'min a(min b c)'は実際に 'foldr1 min [a、b、c]'に対応します。左のフォールド 'foldl1'では 'min(min a b)c'ですが、もちろん同じ結果が得られます。 – leftaroundabout

+0

@leftaroundについて私は左と右の両方の折り目がここで使用できることはかなり明らかであるので、私はそれについて本当に考えなかったと認めなければならないが、あなたは明らかに正しい。 –

関連する問題