2017-03-10 60 views
3

作爲Haskell的初學者,我試圖編寫一個代碼來查找3個整數中最小的一個。這是我迄今爲止所擁有的。任何人都可以把我推向正確的方向嗎?如何在Haskell中找到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) 

如果你不滿意調用它兩次,希望有一個更簡潔的解決方案,你可以使用minimum功能。它接受一個列表,並返回其最小值:

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

中綴版本,''最小a b c = a'min' b'min' c'',看起來相當不錯。 –

5

@ Zheka代碼爲三位數字工作正常,並且如果你需要更多的,它足以注意到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

@leftaroundabout我不得不承認,我並沒有真正想到這一點,因爲很明顯左右兩個摺疊都可以在這裏使用,但你顯然是對的。 –

相關問題