如何为以下函数定义类型配置文件?

时间:2016-08-30 06:34:53

标签: functional-programming ml

我必须定义此函数的类型配置文件:

compose(f, g, x) = f(g(x))

结果应该如下,但我不明白为什么。

(’a -> ’b) * (’c -> ’a) * ’c -> ’b

2 个答案:

答案 0 :(得分:0)

如果您查看r1[qend] < r2[qend]的定义,首先将composeg)应用于x,这样您就可以从(’c -> ’a)转到{ {1}}。然后,'c'a)会应用于所述f并返回(’a -> ’b),因此整个'a函数会从'b转到{{} 1}}。

答案 1 :(得分:0)

推理与您的其他问题几乎相同:How to define the type profile for this function?

  1. 3个参数 - 签名a -> c -> e -> f
  2. 前两个是一元函数(a = a -> bc = c -> d) - 签名(a -> b) -> (c -> d) -> e -> f
  3. 第三个是第二个函数(e = c) - 签名(a -> b) -> (c -> d) -> c -> f)
  4. 的参数
  5. 第二个函数的结果是第一个函数的结果(d = a) - 签名(a -> b) -> (c -> a) -> c -> f
  6. 第一个函数的输出是整个表达式的输出(f = b) - 签名(a -> b) -> (c -> a) -> c -> b
  7. 请在下次尝试自己提供一些推理

    编辑:上面的推理是Haskell的结束(问题在开头被标记),对于ML还有一个步骤:

    1. 前三个是元组参数,因此它们之间是*而不是->,签名变为(a -> b) * (c -> a) * c -> b