【发布时间】:2021-09-02 18:22:48
【问题描述】:
我正在尝试创建一个函数,该函数采用 (key,value) 的两个对列表,比较键,如果相同,则返回联合列表:
[(1,["one"]);(1,["uno"])] 和 [(2,["two"]);(1,["eden"])]
应该返回[(1,["one";"uno";"eden"]);(2,"two")]
此代码返回单位,我不知道为什么:
type 'a kvs=(int*('a list))list ;;
let rec union l1 l2 = match l1 with
|[]->l2
|h::t-> let (k1,v1) = h and (k2,v2)=(List.hd l2) in
if (k1=k2)then begin
v1@v2; (*this part*)
union t l2
end
else union t l2;;
let l1 = [(1,["three"]);(1,["tri"])];;
let l2 = [(2,["three"]);(1,["tri"])];;
union l1 l2;;
【问题讨论】:
-
列表是不可变的。
v1@v2创建一个新列表,但您只是将其丢弃。您需要考虑如何返回此值以及在列表的其余部分上调用union的结果。 -
嘿 OP(@tacocat),因为我的回答被否决了,我不知道为什么,所以我期待你的一点帮助。如果是您投了反对票,请给我留言,以便我知道原因,如果没有,请忽略。我不太关心否决票,而只是试图了解如何回答可以以多种方式解释的问题,并且是否有一种方式可以满足所有不同且不相关的解释。请帮忙,我只是敦促自己在 SO 上做得更好。
-
@NalinRanjan 我的猜测是因为您没有解决实际问题。 OP 不仅要求解决方案,还要求解释他们为什么会出错。虽然我认为即使他们只是要求一个解决方案,你仍然不应该只是给他们一个复制粘贴的答案,因为大多数这类问题来自试图解决一个练习的学生,而且有一个教授创建练习而不只是发布示例问题和解决方案列表的充分理由;让学生思考如何解决问题并考虑不同的解决方案。
标签: list tuples ocaml union key-value