二郎列表理解

tit*_*tus 4 erlang list-comprehension variable-assignment

我正在测试一个带有两个不等式的表达式,用于列表理解的条件.有没有办法在这里进行分配,而不是重复那个表达式?(以下代码不起作用,但我希望如此)

诊断(专长,PatientSymptoms) - >

{[CertainDisease||
    {CertainDisease,KnownSymptoms}<-Expertise,
    C=length(PatientSymptoms)-length(PatientSymptoms--KnownSymptoms),
    C>=2,
    C<=5      
 ]}.
Run Code Online (Sandbox Code Playgroud)

rvi*_*ing 12

直接编写它的fun方法是使用begin ... end以布尔测试结尾的块:

[ CertainDisease || {CertainDisease,KnownSymptoms} <- Expertise,
                    begin
                        C = length(PatientSymptoms) - length(PatientSymptoms -- KnownSymptoms),
                        C >= 2 andalso C <= 5
                    end ]
Run Code Online (Sandbox Code Playgroud)


Tra*_*ebb 6

定义过滤功能; 这样,每个元素调用一次,从而消除了重复计算C:

Filter = fun({CertainDisease, KnownSymptoms}) ->
    C = length(PatientSymptoms) - length(PatientSymptoms--KnownSymptoms),
    C >= 2 andalso C <= 5       
end
Run Code Online (Sandbox Code Playgroud)

并在列表理解中使用它,如下所示:

[CertainDisease ||
    {CertainDisease,KnownSymptoms} <- Expertise,
    Filter({CertainDisease, KnownSymptoms})      
]
Run Code Online (Sandbox Code Playgroud)