【问题标题】:how to write the identity function in haskell如何在haskell中编写身份函数
【发布时间】:2010-07-03 12:29:52
【问题描述】:

我有一个这样的函数:

functionX :: [String] -> ([Integer] -> [Integer])

它有点像一个映射函数,将一个特定的字符串映射到一个具有相同类型的函数。 因为我需要处理调用functionX[],我认为这个调用应该返回一个叫做identity function的东西,或者什么,我该怎么写呢?

【问题讨论】:

  • 您可能会从其中一本书中受益,这些书是为刚接触 Haskell 的人准备的。我喜欢Learn You a Haskell For Great GoodReal World Haskell。两者都可以免费在线阅读。
  • 我有点疑惑。您的 functionX 接受一个字符串列表,但返回一个函数。或者,也许您实际上的意思是:“functionX :: String -> Int -> Int” 然后您可以使用 zipWith 将其应用于字符串和整数列表。顺便说一句,不需要您的括号; "->" 是右结合的。

标签: haskell


【解决方案1】:

id 在 haskell 中被预定义为标识函数。它的类型为id :: a -> a

如果您愿意,您可以轻松定义自己的:

myIdentityFunction :: a -> a
myIdentityFunction a = a

【讨论】:

  • 所以恒等函数的类型是[Integer] -> [Integer] ?
  • 我可能记错了,但我认为 haskell 默认为泛型类型
  • @baboonWorksFine:齿轮是对的。标识函数的返回类型由其输入类型参数化。由于除了返回它之外它不对输入做任何事情,所以它对输入的类型没有任何限制。在 Haskell 中,类型签名中的小写字母(如 id :: a -> a)表示这些符号代表类型参数,而不是具体类型,如 StringInteger
  • 好吧,问题是,我该如何处理调用“functionX []”
  • 在 Haskell 中,这些类型不是“泛型”而是“多态”。在 Haskell 的上下文中,“通用”意味着完全不同的东西。
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2010-12-03
  • 2018-03-02
相关资源
最近更新 更多