刚刚开始Prolog…需要帮助制作小型专家系统吗

刚刚开始Prolog…需要帮助制作小型专家系统吗,prolog,system,Prolog,System,我刚刚开始第一次使用Prolog,我必须实现一个专家系统。如果某人在黑暗中似乎看不见东西,在黑暗中似乎感觉不到保护,我想诊断他/她害怕黑暗。以下是我针对该场景的代码: fear(dark) :- positive(cantSee), positive(unprotectedInDark). 但是,我不认为这是正确的代码。以下是我的代码,表示肯定(X)“是”: 同样,下面是我的负数(X)代码: 这是解决上述问题的正确代码吗?此外,我如何让我的专家系统“记住”答案?这个代码在我的脑海中,但我认为这

我刚刚开始第一次使用Prolog,我必须实现一个专家系统。如果某人在黑暗中似乎看不见东西,在黑暗中似乎感觉不到保护,我想诊断他/她害怕黑暗。以下是我针对该场景的代码:

fear(dark) :- positive(cantSee), positive(unprotectedInDark).
但是,我不认为这是正确的代码。以下是我的代码,表示肯定(X)“是”:

同样,下面是我的负数(X)代码:

这是解决上述问题的正确代码吗?此外,我如何让我的专家系统“记住”答案?这个代码在我的脑海中,但我认为这个不起作用:

remember(X, yes) :- assert(ask(X, yes)).
remember(X, no) :- assert(ask(X, no)).

也许ask/2应该先检查问题是否已经得到回答

:- dynamic remember/2.

ask(What, YN) :- remember(What, YN), !.
ask(What, YN) :- write(What), write(?),
     read(YN), /* should validate user'answer */,
     assertz(remember(What, YN)).

记住,您的意思是希望您的程序在执行过程中,甚至在关闭文件并再次执行后记住它?记住,我的意思是说,如果我对一个问题说“是”,系统会将答案保留为“是”,并且无法更改它。例如,一旦答案是肯定的,我就不能把它改成否定的。专家系统似乎是学习Prolog的第一个积极的项目。如果您不希望它在写入后覆盖一个答案,您只需检查它是否已经被断言,而不要收回并断言一个新的答案。或者有什么原因不适合您的情况吗?您可能会发现专家系统外壳比Prolog更适合您的尝试。
remember(X, yes) :- assert(ask(X, yes)).
remember(X, no) :- assert(ask(X, no)).
:- dynamic remember/2.

ask(What, YN) :- remember(What, YN), !.
ask(What, YN) :- write(What), write(?),
     read(YN), /* should validate user'answer */,
     assertz(remember(What, YN)).