将所有可能性从数据库添加到列表,Prolog

时间:2019-03-07 22:44:22

标签: list recursion foreach prolog

我要完成的工作是找到数据库中某个变量的所有可能匹配项,然后将其对应的变量添加到列表中。例如,我有一个疾病数据库,其中列出了症状及其相关疾病。以下是一个简短的摘要。

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还是陌生的,那么对此的任何建议将不胜感激。

我看不出这个问题与链接为重复的问题有何相同。仅仅因为他们都处理疾病并不能使疾病重复。

0 个答案:

没有答案