我要完成的工作是找到数据库中某个变量的所有可能匹配项,然后将其对应的变量添加到列表中。例如,我有一个疾病数据库,其中列出了症状及其相关疾病。以下是一个简短的摘要。
symptom(smallpox,fever).
symptom(smallpox,rash).
symptom(shingles,headache).
symptom(shingles,fever).
symptom(shingles,malaise).
因此,如果我正在寻找发烧,会在列表中添加天花和带状疱疹。
第一次尝试,
test :- symptom(X,Y),
(
Y =fever
->
write(X),nl
;
fail
).
显示正确的带状疱疹但不会循环通过。 我认为这是可行的第二次尝试,当我尝试写入(Test0)时显示为[[]。
test(Test0) :- symptom(X,Y),
(
Y =fever
->
Test0 =[X|TestB],
test(TestB)
;
Test0=[]
).
最后,我最后一次尝试
test:- foreach(symptom(X,fever),write(X)).
正确显示带状疱疹和天花,因此我认为使用其中一种可能正处于正确的轨道。如果您无法确定我对Prolog还是陌生的,那么对此的任何建议将不胜感激。
我看不出这个问题与链接为重复的问题有何相同。仅仅因为他们都处理疾病并不能使疾病重复。