【问题标题】:The most general type of a given function给定函数的最一般类型
【发布时间】:2014-01-09 12:32:12
【问题描述】:

我正在学习操作语义和类型系统的测试,我遇到了一个我不知道如何处理的任务。

任务如下:确定函数f的最一般类型。 f(a,b,c,d) = g(c,d), where g = a(b).


我猜函数 f(a,b,c,d) 返回函数 g(c,d) 的输出。所以让我们假设 c,d 是一些基本类型的变量,而 a 是一个带有一个参数 b 的基本类型的函数。但是我不知道g = a(b) 在不带参数的情况下是什么意思,当以g(c,d) 的形式调用此函数时...或者我刚才所说的是否正确:-/

我不知道在这里做什么。你能给我一个提示或将我重定向到一些关于这个主题的文章(最好有一个像这样的例子)。到目前为止,我发现的唯一内容是关于类型系统和语义的一般文本。非常感谢!

【问题讨论】:

  • a 是一个参数的函数 - 它返回一个有两个参数的函数(称为 g)
  • @user3125280 你应该让它成为一个答案.. 这是一个很好的答案。

标签: types semantics


【解决方案1】:

你必须问自己“a 是什么类型的函数?”

由于a(b)后面被用作g(c,d)(和(a(b))(c,d)一样),所以我们知道a(b)的结果是一个函数.所以“a”是一个返回函数的函数。具体来说,它是一个返回带有两个参数 c 和 d 的函数的函数。

如果上述内容令人困惑(我不确定您对函数式编程等的熟悉程度),那么考虑一个具体示例可能会有所帮助。想象一下,你有两个函数,foo 和 bar。 foo 将两个数字相乘(c 和 d),而 bar 将两个数字相加。

a 可以是一个函数,它选择我们要使用 foo 还是 bar。

所以 f(a , "bar", 1, 2) 将是 (a("bar"))(1, 2) = 1 + 2 = 3。 f(a , "foo", 1, 2) 将是 (a("foo"))(1, 2) = 1 * 2 = 2。

【讨论】:

  • 谢谢.. 这实际上是有道理的,而且很有帮助!
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 2017-08-13
  • 2012-02-14
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2022-01-07
相关资源
最近更新 更多