从一个列表中删除另一个
Deleting one list from another
我正在尝试编写一个程序来删除 list1(如果它在 list2 中)。
例如
delete [1,2] [1,2,3,4]
=> [3,4]
我非常接近解决它,但我的代码只从第二个列表中删除第一个列表的头部,所以...
delete [1,2] [1,2,3,4]
=> [2,3,4]
如果有人能提供帮助,那就太好了:)
fun delete (hd1::tl1) [] = []
| delete (hd1::tl1) (hd2::tl2) =
if hd1 = hd2 then delete (hd1::tl1) tl2 else hd2::delete(hd1::tl1) tl2;
取列表之间的析取;
A-[1,2]B-[1,2,3,4] list(set(A) - set(B)) which returns [3,4]
然后列出理解;
diff = [3,4] [x for x in B if x not in diff]
您需要确定整个第一个列表是否是第二个列表的开始。
并且您想在以前所做的基础上再接再厉 - 当您学习时,通常情况下您最近做了一些有用的事情。
给定一个函数 start
来确定一个列表是否是另一个列表的开始,你可以这样写
fun delete xs ys = if start xs ys
then <...>
else (hd ys) :: (delete xs (tl ys))
有趣的部分留作练习(你几乎肯定已经看到了可以使用的库函数)。
我正在尝试编写一个程序来删除 list1(如果它在 list2 中)。
例如
delete [1,2] [1,2,3,4]
=> [3,4]
我非常接近解决它,但我的代码只从第二个列表中删除第一个列表的头部,所以...
delete [1,2] [1,2,3,4]
=> [2,3,4]
如果有人能提供帮助,那就太好了:)
fun delete (hd1::tl1) [] = []
| delete (hd1::tl1) (hd2::tl2) =
if hd1 = hd2 then delete (hd1::tl1) tl2 else hd2::delete(hd1::tl1) tl2;
取列表之间的析取;
A-[1,2]B-[1,2,3,4] list(set(A) - set(B)) which returns [3,4]
然后列出理解;
diff = [3,4] [x for x in B if x not in diff]
您需要确定整个第一个列表是否是第二个列表的开始。
并且您想在以前所做的基础上再接再厉 - 当您学习时,通常情况下您最近做了一些有用的事情。
给定一个函数 start
来确定一个列表是否是另一个列表的开始,你可以这样写
fun delete xs ys = if start xs ys
then <...>
else (hd ys) :: (delete xs (tl ys))
有趣的部分留作练习(你几乎肯定已经看到了可以使用的库函数)。