Erlang中的列表 - 理解 - 守卫中的变量未绑定

时间:2014-05-29 21:17:54

标签: filter erlang list-comprehension

我正在尝试使用此方法递归地构建列表。 OL(出现的字符列表)是最终缩小为[]的列表。我需要在警卫中使用Q来检查是否可以减去该项目。基本上它应该生产过滤的笛卡尔积。

b([[]], _)->[[]];
b(_, [])-> [[]];
b(OL, Keys)->[Y++[Q] || Y <- b(subtract(Q,OL), Keys),  Q <-Keys, len(subtract(Q,OL)) < len(OL)].

但我得到错误:

  

变量&#39; Q&#39;没有约束

有没有办法在那个地方使用它的价值?

subtract-method从另一个列表中过滤掉字符。 减去([{$ a,1}],[{$ a,5},{$ b,1}])返回[{$ a,5},{$ b,1}]。

len()总结每个元组的整数值。 len([{$ a,5},{$ b,1}])返回6.

1 个答案:

答案 0 :(得分:1)

尝试将Q生成器放入Y生成器使用之前。我猜这些定义是从左到右应用的,所以当应用Y时,没有定义Q.