Prolog将事实中的元素返回给用户

Prolog将事实中的元素返回给用户,prolog,Prolog,我有一个Prolog知识库,其中包含一些称为facts.pl的“症状”事实。以下是我的知识库示例: symptom("Typhoid", "muscle_pain"). symptom("Typhoid", "bloating"). symptom("Meningitis", "headache"). symptom("Meningitis", "fever"). symptom("Meningitis", "stiff neck" ). symptom("Measles", "cough").

我有一个Prolog知识库,其中包含一些称为facts.pl的“症状”事实。以下是我的知识库示例:

symptom("Typhoid", "muscle_pain").
symptom("Typhoid", "bloating").
symptom("Meningitis", "headache").
symptom("Meningitis", "fever").
symptom("Meningitis", "stiff neck" ).
symptom("Measles", "cough").
symptom("Measles", "runny_nose").
我在另一个名为“diseaseSearch.pl”的文件中编写了一个简短的序言程序。该程序参考facts.pl,应该允许用户输入疾病名称,并将疾病的相应症状打印到屏幕上

我的代码:

:- write('loading disease database'), nl.
:- [facts].
:- write('disease database loaded'), nl, nl.

getsymptoms:-
    write('>   Enter a diseae name followed by a period.'), nl,
    write('For Example: Measles'), nl,
    write('Disease Name?:'),
    read(Input), nl,
    symptom(Input,Output),
    write(Output).
如果我输入“麻疹”,输出应该是“咳嗽”和“流鼻涕”。然而,使用上面的代码,无论我输入哪种疾病,它总是返回第一个事实的结果,即“肌肉疼痛”


我从一个在线教程中找到了一个类似的方法,我现在正试图学习Prolog输入和输出的基础知识。我走对了吗?如果您能提供一些解决此问题的建议,我们将不胜感激

我猜您是在没有“”的情况下进入麻疹,prolog将其作为变量。您可以使用“”来输入它。如果你输入麻疹,那么它是一个变量,但如果你输入“麻疹”,那么它是一个术语


如果您想输入而不需要注释,那么您需要创建一个包含所有术语(即它们以小写字母开头)的数据库,然后您就不需要注释。

您真的要输入“麻疹”吗?或者你在没有引号的情况下输入麻疹?麻疹。没有引号。有没有更好的方法让我把它注释得更清楚?(我还附上了一张图片,显示它应该如何进入程序)…而是使用单引号。我不敢相信我没有想过要尝试。这很有效,谢谢你!