gpt4 book ai didi

types - 函数式语言是否使用来自调用者的信息进行类型推断?

转载 作者:行者123 更新时间:2023-12-01 08:13:48 24 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




考虑例如 Haskell 或 ML 中的函数 f1 和 f2。假设 f2 调用 f1。类型推断是否只是使用f1可以调用的信息,相当于只看f1的定义。或者它是否还查看了在对 f1 进行类型推断时 f2 调用 f1 的方式。例如 f2 可能在调用 f1 时传入文字,这将限制 f1 的参数类型。

最佳答案

那要看功能是否f1受声明或其他方式的约束(例如作为 f2 的函数参数)。在前一种情况下,它的类型可以概括为多态,在后一种情况下不能, Unresolved 部分由上下文决定。即使在前一种情况下,也可能适用其他规则,例如 ML 的值限制。

考虑 Haskell 中的这个例子:

f1 = \x -> x  -- polymorphic: f1 :: a -> a
f2 = f1 True -- instantiates f1 :: Bool -> Bool

f2 = let f1 = \x -> x in f1 True -- likewise

f2 = (\f1 -> f1 True) (\x -> x) -- here, f1 cannot be polymorphic,
-- so the lambda is restricted to Bool -> Bool by the call

在 SML 中类似:

val f1 = fn x => x  (* polymorphic, f1 : 'a -> 'a *)
val f2 = f1 true

val f2 = let val f1 = fn x => x in f1 true end (* likewise *)

val f2 = (fn f1 => f1 true) (fn x => x) (* f1 monomorphic, f1 : bool -> bool *)

val f1 = let _ = 0 in fn x => x end (* value restriction applies, f1 cannot be polymorphic *)
val f2 = f1 true (* determines type f1 : bool -> bool *)

为清楚起见,我没有在这里使用缩写的函数声明语法。

关于types - 函数式语言是否使用来自调用者的信息进行类型推断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com