【发布时间】:2017-09-15 15:27:51
【问题描述】:
我在使用 SML 中的以下代码时遇到问题:
fun inter s1 s2 =
let
fun inter' [] _ interSet = interSet
| inter' _ [] interSet = interSet
| inter' (x1::s1) (x2::s2) interSet =
if x1=x2 then
inter' s1 s2 (x1::interSet) (* Add the value to the intersection and advance in both s1 and s2*)
else if x1 < x2 then
inter' s1 (x2::s2) interSet (* Keep going through s1 *)
else
inter' (x1::s1) s2 interSet (* Keep going through s2 *)
in
if s1=[] orelse s2=[] then []
else
inter' s1 s2 []
end;
inter 函数返回一个列表,其中包含两个 ORDERED 列表 s1 和 s2 之间的交集(即在 s1 和 s2 中找到的值)。我期待它适用于所有相等类型,但函数类型是:
val inter = fn: int list -> int list -> int list
为什么不是:
val inter = fn: ''a list -> ''a list -> ''a list ?
看来问题出在
x1 < x2
我认为
【问题讨论】:
-
如果对您有帮助,请不要忘记将答案标记为已接受。另外,为他们投票。
标签: sml