【发布时间】:2011-05-26 17:26:33
【问题描述】:
我有这段代码:
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
带有类型签名
(''a * ''a -> ''a) * ''a list -> ''a
看起来很简单,因为 xs = [] 比较,它需要一个处理相等类型的函数和一个相等类型列表作为参数。但是,由于某种原因,它适用于 (op +, [2.3, 2.7, 4.0]) 等输入,而在 SML/NJ 中,实数不是相等类型。谁能帮我解释一下为什么会发生这种魔法?
【问题讨论】:
-
+1,我也想知道为什么会这样。就好像 SML/NJ 将条件块转换为“null [2.3, 2.7, 4.0]”或类似的。