Haskell 中 id function 有哪些用途?
最佳答案
它作为 higher order functions(将函数作为参数的函数)的参数很有用,您希望某些特定值保持不变。
示例 1 :如果它在 Just 中,则保留一个值,否则返回默认值 7。
Prelude Data.Maybe> :t maybe
maybe :: b -> (a -> b) -> Maybe a -> b
Prelude Data.Maybe> maybe 7 id (Just 2)
2
示例 2 :通过折叠构建功能:
Prelude Data.Maybe> :t foldr (.) id [(+2), (*7)]
:: (Num a) => a -> a
Prelude Data.Maybe> let f = foldr (.) id [(+2), (*7)]
Prelude Data.Maybe> f 7
51
我们通过将函数列表与
f
折叠在一起构建了一个新函数 (.)
,使用 id
作为基本情况。示例 3 :函数作为幺半群的基本情况(简化)。
instance Monoid (a -> a) where
mempty = id
f `mappend` g = (f . g)
类似于我们的 fold 示例,函数可以被视为可连接的值,
id
用于空情况,(.)
作为附加。示例 4 :一个简单的哈希函数。
Data.HashTable> h <- new (==) id :: IO (HashTable Data.Int.Int32 Int)
Data.HashTable> insert h 7 2
Data.HashTable> Data.HashTable.lookup h 7
Just 2
哈希表需要哈希函数。但是如果你的 key 已经被散列了怎么办?然后传递 id 函数,填充为您的散列方法,性能开销为零。
关于function - Haskell id 函数的用途,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3136338/