0
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。

4

2 回答 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 回答