如何修复Prolog语法错误:操作员预期错误?


PROLOG:"语法错误:预期的运算符" 错误:c:/users/zulfekarali/Desktop/KBS/kbs.pl:2:3:语法错误:预期的运算符 % c:/Users/ZulfekarAli/Desktop/KBS/kbs.pl编译 0.00 秒,27 个子句 -------- 域 疾病,适应症=符号 患者,名称 = 字符串 谓词 假设(字符串,疾病) 症状(名称,适应症) 响应(字符) 去 第 去:- write("病人叫什么名字?"), readln(患者), 假设(患者,疾病), 写(患者,"可能有",疾病,"."),nl。 去:- 写("对不起,我似乎不能"),nl, 写("诊断疾病"),nl。 症状(患者,发烧) :- 写("病人"发烧吗(是/否)?"), 回复(回复), 回复='y'。 症状(患者,皮疹) :- 写("病人"有皮疹吗(是/否)? 回复(回复), 回复='y'。 症状(患者,头痛) :- 写("病人",有头痛吗(是/否)?"), 回复(回复), 回复='y'。 症状(患者,runny_nose) :- write(",病人"有runny_nose(y/n)吗?"), 回复(回复), 回复='y'。 症状(患者,结膜炎):- 写("患者是否患有结膜炎(y/n)? 回复(回复), 回复='y'。 症状(患者,咳嗽) :- 写("病人",有咳嗽吗(是/否)?"), 回复(回复), 回复='y'。 症状(患者,body_ache) :- write("病人"有body_ache吗(y/n)?"), 回复(回复), 回复='y'。 症状(患者,发冷) :- 写("病人"有寒战吗(是/否)? 回复(回复), 回复='y'。 症状(患者,sore_throat) :- write(",病人"有sore_throat(y/n)吗?"), 回复(回复), 回复='y'。 症状(患者,打喷嚏):- 写("病人",有打喷嚏吗(是/否)?"), 回复(回复), 回复='y'。 症状(患者,swollen_glands) :- write(",病人"有swollen_glands(y/n)吗?"), 回复(回复), 回复='y'。 假设(患者,麻疹) :- 症状(患者,发热), 症状(患者,咳嗽), 症状(患者,结膜炎), 症状(患者,runny_nose), 症状(患者,皮疹)。 假设(患者,german_measles) :- 症状(患者,发热), 症状(患者,头痛), 症状(患者,runny_nose), 症状(患者,皮疹)。 假设(患者,流感) :- 症状(患者,发热), 症状(患者,头痛), 症状(患者,body_ache), 症状(患者,结膜炎), 症状(患者,寒战), 症状(患者,sore_throat), 症状(患者,runny_nose), 症状(患者,咳嗽)。    假设(患者,common_cold) :- 症状(患者,头痛), 症状(患者,打喷嚏), 症状(患者,sore_throat), 症状(患者,runny_nose), 症状(患者,寒战)。 假设(患者,流行性腮腺炎):- 症状(患者,发热), 症状(患者,swollen_glands)。 假设(患者,chicken_pox) :- 症状(患者,发热), 症状(患者,寒战), 症状(患者,body_ache), 症状(患者,皮疹)。 假设(患者,麻疹) :- 症状(患者,咳嗽), 症状(患者,打喷嚏), 症状(患者,runny_nose)。 回复(回复) :- 读字符(回复), 写(回复),nl。
domains
disease,indication = symbol
Patient,name = string
predicates
hypothesis(string,disease)
symptom(name,indication)
response(char)
go
clauses

我认为这段代码应该用%符号注释,以修复语法错误。

在这里,作为另一个问题,你可能想在谓词的最后一个剪切(!),否则Prolog因为回溯会在第一个成功时尝试第二个go

go :-
write("What is the patient's name? "),
readln(Patient),
hypothesis(Patient,Disease),
write(Patient,"probably has ",Disease,"."),nl,!.

由于多种原因,您提供的代码是无效的 SWI-Prolog 代码。

1

在第一次出现go:-之前已经观察到的未注释自由文本的出现。

阿拉伯数字

谓词write/[3,4]在SWI-Prolog中不存在。

3

谓词readln/1存在于库readln中。即使此模块是自动加载的,最好使用文件顶部的声明:- use_module(library(readln)).显式表示依赖项。

更重要的是,readln/1返回列表,但hypothesis/2symptom/2似乎预料到非列表输入。

readln/1中的元素(原子)与write/[3,4]的其他参数(字符串)之间存在不匹配。

相关内容

  • 没有找到相关文章

最新更新