【问题标题】:Why does using my function as a parameter for another function cause an error? Haskell为什么将我的函数用作另一个函数的参数会导致错误?哈斯克尔
【发布时间】:2014-12-21 21:34:00
【问题描述】:

我有两个功能:

f1 :: Bool -> Int
f1 x 
    | x == True     = 5
    | x == False    = 10

f2 :: Int -> Int
f2 x = x * 2

既然 f1 的输出是 f2 的正确输入,那怎么来的

f2 f1 True

导致错误?

我不知道要标记什么,所以标记可能不合适。

【问题讨论】:

  • 试试f2 (f1 True)f2 $ f1 True
  • @Jubobs 你能给我举个例子,其中 (f g) x 是一个格式良好的表达式,f 和 g 都是函数吗?
  • @Arthur filter odd [1, 2, 3] 例如。
  • @Arthur 考虑doTwice f x = f (f x) 它的类型为(a->a)->a->a。那么(doTwice (\x -> x+1)) 3 的格式就很好了。
  • @Arthur 现在我确信这些都是家庭作业问题。这里有一个提示。如果(f g) x 格式正确,则必须存在一些函数h 使得h . f g 格式正确。

标签: haskell currying higher-order-functions


【解决方案1】:

函数应用是左关联的,所以f2 f1 True(f2 f1) True 相同,而不是f2 (f1 True)(f2 f1) True 显然是错误输入的,因为 f2 的参数类型为 Int,但 f1 的类型为 Bool -> Int,而不是 Int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多