我有以下代碼:有沒有數字剪裁的標準Haskell函數?
clip n = if n < 0 then 0 else n
這是在相同的 「類別」 爲abs
,ceiling
,floor
。我不認爲有這樣的標準功能?
我有以下代碼:有沒有數字剪裁的標準Haskell函數?
clip n = if n < 0 then 0 else n
這是在相同的 「類別」 爲abs
,ceiling
,floor
。我不認爲有這樣的標準功能?
肯定有一個:
clip = max 0
一個方面說明,對於一個封閉的區間內的限幅N [A,B],即
考慮
clip :: (Ord a) => a -> a -> a -> a
clip n a b = min b $ max n a
,或者如果你喜歡免費的點對點式:
clip :: Ord a => a -> a -> a -> a
clip a b = (a `max`) . (`min` b)
'max'和'min'都是可交換的操作,所以可以簡單地'clip a b = max a。分鐘b'。 –
感謝一堆評論/改進。 – elm
右移和'xor'的方法可能是值得一提,它在某些情況下更好。 – dfeuer
@dfeuer我不熟悉那些與剪輯有關的問題... –
如果你正確的算術移位(通常'Int'的右移是算術),那麼你將得到所有的0,如果數字如果數字爲負值,則爲0或全爲1。雖然'xor'是錯誤的操作符。我的意思是翻轉這些位和'。&。'它。 – dfeuer