gpt4 book ai didi

list - SML 函数使用 2 个返回 XOR 的列表---固定

转载 作者:行者123 更新时间:2023-12-04 05:14:52 25 4
gpt4 key购买 nike

任何人都能够为 SML 中的函数提供任何建议,该函数将采用 2 个列表并返回它们的 XOR,因此如果您有列表 [a,b,c,d], [c,d,e,f]函数返回 [a,b,e,f] ?

我试图用 2 个函数来做到这一点,但即使这样也不能正常工作。

fun del(nil,L2) = nil
|del(x::xs,L2)=
if (List.find (fn y => y = x) L2) <> (SOME x) then
del(xs, L2) @ [x]
else
del(xs, L2);

fun xor(L3,L4) =
rev(del(L3,L4)) @ rev(del(L4,L3));

最佳答案

您的尝试似乎几乎是正确的,除了 fn x => x = x没有意义,因为它总是返回 true。我想你想要 fn y => y = x相反。

一些其他的评论:

  • 您可以替换您对 List.find 的使用与 List.filter这更接近你想要的。
  • 不做del(xs,L) @ [x]对于递归步骤。追加到列表末尾的成本与第一个列表的长度成线性关系,因此如果您在每一步都这样做,您的函数将具有二次运行时间。做 x :: del(xs,L)相反,这也允许您最终删除列表反转。
  • 您在这里所说的“XOR”通常称为对称差,至少对于类似集合的结构而言。
  • 关于list - SML 函数使用 2 个返回 XOR 的列表---固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409973/

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