【发布时间】:2012-04-14 04:10:35
【问题描述】:
以下等式是用 Miranda 语法编写的,但由于 Miranda 和 Haskell 之间的相似之处,我希望 Haskell 程序员应该理解它!
如果你定义了以下函数:
rc v g i = g (v:i)
rn x = x
rh g = hd (g [])
f [] y = y
f (x:xs) y = f xs (rc x y)
g [] y = y
g (x:xs) y = g xs (x:y)
你如何计算出函数的类型?我想我知道如何为 f、g 和 rn 解决这个问题,但我对部分应用程序部分感到困惑。
rn 将是 * -> *(或任何东西 -> 任何东西,我认为它是 Haskell 中的 a -> a?)
对于 f 和 g,函数类型是否都是 [*] -> * -> *?
我不确定如何找到 rc 和 rh 的类型。在 rc 中,g 被部分应用于变量 i - 所以我猜测这将 i 的类型限制为 [*]。 rc 的定义中 rc 和 g 的顺序是什么? g 是否应用于 i,然后将生成的函数用作 rc 的参数?或者 rc 是否采用 v、g 和 i 的 3 个单独参数?我真的很困惑..任何帮助将不胜感激!谢谢大家。
抱歉忘了加上 hd 是列表的标准头函数,定义为:
hd :: [*] -> *
hd (a:x) = a
hd [] = error "hd []"
【问题讨论】:
-
不,我现在正在准备考试,这是米兰达考试的老问题。
-
hd函数的类型是什么? -
抱歉忘记添加该定义 - 我现在已将其添加到问题中!
标签: types definition