Erlang列表理解
我正在测试一个带有两个不等式的表达式,它的条件是列表理解。有没有一种方法可以在这里进行赋值而不复制该表达式 以下代码不起作用,但我希望它能起作用:Erlang列表理解,erlang,variable-assignment,list-comprehension,Erlang,Variable Assignment,List Comprehension,我正在测试一个带有两个不等式的表达式,它的条件是列表理解。有没有一种方法可以在这里进行赋值而不复制该表达式 以下代码不起作用,但我希望它能起作用: diagnose(Expertise,PatientSymptoms) -> {[CertainDisease|| {CertainDisease,KnownSymptoms}<-Expertise, C=length(PatientSymptoms)-length(PatientSymptom
diagnose(Expertise,PatientSymptoms) ->
{[CertainDisease||
{CertainDisease,KnownSymptoms}<-Expertise,
C=length(PatientSymptoms)-length(PatientSymptoms--KnownSymptoms),
C>=2,
C<=5
]}.
诊断(专家、患者症状)->
{[某些疾病]||
{某些疾病,已知症状}=2,
C定义一个过滤函数;这样,每个元素调用一次过滤函数,消除了重复计算C
:
Filter = fun({CertainDisease, KnownSymptoms}) ->
C = length(PatientSymptoms) - length(PatientSymptoms--KnownSymptoms),
C >= 2 andalso C <= 5
end
Filter=fun({CertainDisease,KnownSymptoms})->
C=长度(患者症状)-长度(患者症状-已知症状),
C>=2,并且C一种不带fun
直接编写的方法是使用begin…end
块,以布尔测试结尾:
[ CertainDisease || {CertainDisease,KnownSymptoms} <- Expertise,
begin
C = length(PatientSymptoms) - length(PatientSymptoms -- KnownSymptoms),
C >= 2 andalso C <= 5
end ]
[CertainDisease | |{CertainDisease,KnownsSymptoms}=2,也可以将赋值转换为单例生成器:
{[CertainDisease||
{CertainDisease,KnownSymptoms} <- Expertise,
C <- [length(PatientSymptoms)-length(PatientSymptoms--KnownSymptoms)],
C >= 2,
C <= 5
]}.
{[CertainDisease]||
{CertainDisease,KnownSymptoms}{NewDisease}=diagnose([{d1[s1,s2,s3]},{d2[s1,s2,s3,s4]}],[s1,s2,s4])这能回答你的问题吗?只要过滤器fun
与患者症状处于相同的动态范围内,就应该工作。这就是我一分钟前问的问题。
{[CertainDisease||
{CertainDisease,KnownSymptoms} <- Expertise,
C <- [length(PatientSymptoms)-length(PatientSymptoms--KnownSymptoms)],
C >= 2,
C <= 5
]}.