2015-04-12 52 views

回答

10

肯定有一個:

clip = max 0 
+0

右移和'xor'的方法可能是值得一提,它在某些情況下更好。 – dfeuer

+0

@dfeuer我不熟悉那些與剪輯有關的問題... –

+2

如果你正確的算術移位(通常'Int'的右移是算術),那麼你將得到所有的0,如果數字如果數字爲負值,則爲0或全爲1。雖然'xor'是錯誤的操作符。我的意思是翻轉這些位和'。&。'它。 – dfeuer

4

一個方面說明,對於一個封閉的區間內的限幅N [A,B],即

  • ñ如果一個< = N < = B
  • 一個如果n <一個
  • b如果N> 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) 
+3

'max'和'min'都是可交換的操作,所以可以簡單地'clip a b = max a。分鐘b'。 –

+0

感謝一堆評論/改進。 – elm