You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang中随机生成列表并删除另一列表元素的问题求助

解决Erlang列表差集未生效的问题

嘿,刚看了你的代码,问题其实出在列表的嵌套上,我来给你拆解一下~

核心问题分析

你写的代码里,R1 = [[rand:uniform(10) || _ <- lists:seq(1, 10)]] 用了两层方括号,这导致R1不是一个普通的数字列表,而是一个「包含了一个数字列表的列表」,R2也是同样的结构。

Erlang的--操作符是用来求列表差集的,它的逻辑是:遍历左边列表的每个元素,只要这个元素完整出现在右边列表里,就把它从结果中移除。但你的R1里的唯一元素是那个内部的数字列表,R2里的唯一元素是另一个随机生成的数字列表——这两个列表几乎不可能完全相同,所以R1 -- R2的结果还是R1本身,自然看不到任何元素被删除的效果。

修正后的代码

把多余的一层方括号去掉,让R1和R2直接成为数字列表就可以了:

generate_number() ->
    R1 = [rand:uniform(10) || _ <- lists:seq(1, 10)],
    R2 = [rand:uniform(10) || _ <- lists:seq(1, 10)],
    R3 = R1 -- R2,
    io:format("Original List 1: ~p~n", [R1]),
    io:format("Original List 2: ~p~n", [R2]),
    io:format("Final List: ~p~n", [R3]).

额外说明

  • 这个修正后的代码会移除R1中所有在R2里出现过的元素(比如如果R1里有三个7,R2里有一个7,--会把R1里的三个7都删掉)。
  • 如果你的需求是只删除和R2元素对应的次数(比如R1里三个7,R2里一个7,只删一个),那需要自己实现递归遍历匹配的逻辑。

内容的提问来源于stack exchange,提问作者MochaShakaKhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:02