PROLOG:“语法错误:预期运算符”
错误:c:/users/zulfekarali/Desktop/KBS/kbs.pl:2:3:语法错误:操作员预期
% c:/Users/ZulfekarAli/Desktop/KBS/kbs.pl 编译0.00秒,27条
--------
域
疾病,适应症 = 符号
患者,姓名 = 字符串
谓词
假设(字符串,疾病)
症状(名称,适应症)
响应(字符)
去
条款
去 :-
write("病人叫什么名字?"),
读取(患者),
假设(患者,疾病),
write(Patient,"可能有 ",Disease,"."),nl.
去 :-
write("对不起,我好像做不到"),nl,
write("诊断疾病。"),nl.
症状(患者,发烧):-
write(",患者,"是否发烧(y/n)?"),
响应(回复),
回复='y'。
症状(患者,皮疹):-
write("",Patient," 有皮疹 (y/n) 吗?"),
响应(回复),
回复='y'。
症状(患者,头痛):-
write("",Patient," 是否头痛 (y/n) ?"),
响应(回复),
回复='y'。
症状(患者,流鼻涕):-
write("",Patient," 有流鼻涕 (y/n) 吗?"),
响应(回复),
回复='y'。
症状(患者,结膜炎):-
write("",Patient," 是否患有结膜炎 (y/n) ?"),
响应(回复),
回复='y'。
症状(患者,咳嗽):-
write("",Patient," 是否有咳嗽 (y/n) ?"),
响应(回复),
回复='y'。
症状(患者,body_ache):-
write("",Patient," 有 body_ache (y/n) 吗?"),
响应(回复),
回复='y'。
症状(患者,发冷):-
write("",Patient," 有发冷 (y/n) 吗?"),
响应(回复),
回复='y'。
症状(患者,喉咙痛):-
write("",Patient," 有喉咙痛 (y/n) 吗?"),
响应(回复),
回复='y'。
症状(患者,打喷嚏):-
write("",Patient," 是否打喷嚏 (y/n) ?"),
响应(回复),
回复='y'。
症状(患者,肿大的腺体):-
写(“患者”是否有肿胀的腺体(y/n)?“),
响应(回复),
回复='y'。
假设(患者,麻疹):-
症状(病人,发烧),
症状(病人,咳嗽),
症状(患者,结膜炎),
症状(患者,流鼻涕),
症状(患者,皮疹)。
假设(患者,german_measles):-
症状(病人,发烧),
症状(患者,头痛),
症状(患者,流鼻涕),
症状(患者,皮疹)。
假设(患者,流感):-
症状(病人,发烧),
症状(患者,头痛),
症状(患者,body_ache),
症状(患者,结膜炎),
症状(患者,寒战),
症状(患者,喉咙痛),
症状(患者,流鼻涕),
症状(病人,咳嗽)。
假设(患者,common_cold):-
症状(患者,头痛),
症状(病人,打喷嚏),
症状(患者,喉咙痛),
症状(患者,流鼻涕),
症状(患者,寒战)。
假设(患者,腮腺炎):-
症状(病人,发烧),
症状(患者,肿大的腺体)。
假设(患者,chicken_pox):-
症状(病人,发烧),
症状(患者,寒战),
症状(患者,body_ache),
症状(患者,皮疹)。
假设(患者,麻疹):-
症状(病人,咳嗽),
症状(病人,打喷嚏),
症状(患者,流鼻涕)。
响应(回复):-
读字符(回复),
写(回复),nl。
5467 次
2 回答
1
domains
disease,indication = symbol
Patient,name = string
predicates
hypothesis(string,disease)
symptom(name,indication)
response(char)
go
clauses
我认为这段代码应该用%符号注释以修复语法错误。
在这里,作为另一个问题,您可能希望!在谓词的最后一个 cut ( ) ,否则 Prolog 由于回溯将在go第一个成功时尝试第二个。
go :-
write("What is the patient's name? "),
readln(Patient),
hypothesis(Patient,Disease),
write(Patient,"probably has ",Disease,"."),nl,!.
于 2014-03-11T13:38:35.650 回答
1
由于多种原因,您提供的代码是无效的 SWI-Prolog 代码。
1
在第一次出现go:-.
2
write/[3,4]SWI-Prolog 中不存在谓词。
3
谓词readln/1存在于 library 中readln。即使这个模块是自动加载的,最好:- use_module(library(readln)).在文件顶部使用声明来明确依赖。
更重要的是,readln/1返回列表,但hypothesis/2似乎symptom/2预期非列表输入。
4
原子readln/1元素与字符串的其他参数之间存在不匹配。write/[3,4]
于 2014-04-04T21:54:52.383 回答