List erlang列表理解问题

List erlang列表理解问题,list,erlang,list-comprehension,List,Erlang,List Comprehension,我试图计算出一个等式,它是f(Ys)->[Y*2 | | Y[5*2 | | | 5,在输入列表元素中,[5,6]被丢弃,因为Y

我试图计算出一个等式,它是
f(Ys)->[Y*2 | | Y[5*2 | | | 5,在输入列表元素中,
[5,6]
被丢弃,因为
Y<4
为false,留下
[1,2]

您的输出被评估为
Y*2
,因此
[2,4]
的结果对我有效


列表理解获取
Ys
的每个值,并丢弃谓词不为真的值(即
Y<4
不为真的值),然后形成剩余输入列表的列表,其中Y成为这些值。结果通过
Y*2
进行转换,因此此时
[1,2]
变为
[2,4]

在您的
列表理解
末尾的
保护
的返回值,即
Y<4
,将不包括在您的最终列表中,相反,如果它的计算结果为
false
,则列表中的当前元素将被排除在最终列表中,如果它的计算结果为
true
,则该元素将被删除包括在内


在你的例子中,因为
5
不小于
4
,所以它没有包含在最后的列表中,即
[2,4]
列表理解
[Y*2 | | Y>列表理解中的守卫充当过滤器。我担心你得到了“工作答案”,并且没有完全意识到为什么。
-spec my_test(integer()) -> boolean().
my_test(Y) -> Y < 4.
-spec multiply_or_false(integer()) -> integer() | false.
multiply_or_false(Y) ->
    case Y < 4 of
         true  -> Y * 2;
         false -> false
    end.
[multiply_or_false(Y) || Y <- Ys].
lists:map(fun multiply_or_false/1, Ys).