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).