在 Prolog 中事实和规则和在一起组成了知识库(Knowledge base),把这两者写在后缀名为 .pl 的文件里。
可以把这个写到一个 ./ssss.pl 文件中,但不能写在 REPL 里
查询写在 REPL 中,基于已知知识库,对某个问题进行逻辑推理,给出答案。

什么是REPL?
Read - Eval - Print - Loop
读取 - 执行 - 打印输出 - 循环这个过程
有时候翻译成交互式解释器。就是你往REPL里输入一行代码,它立即给你执行结果。而不用像C++, Java那样通常需要编译才能看到运行结果。
在 Prolog 中,小写字母开头的单词是常量,表示一个对象,如 like 、mercury、kathy 都不需要预先定义,不需要赋值,直接写即可。

例:苏格拉底会不会死?
利用前面这些知识,就可以解决很多逻辑问题了,例如,已知:
苏格拉底是人
人都会死
所以可以退出结论:苏格拉底会死。
用 Prolog 来解决这个问题:
person(socrates).
person(plato).
person(aristotle).
mortal(X):-person(X).
%查询
mortal_report:-
write('known mortals are:'),nl,mortal(X),write(X),nl.

?-mortal(socrates).
true.
?-mortal(X).
socrates.

可以把这个写到一个 ./ssss.pl 文件中,但不能写在 REPL 里
查询写在 REPL 中,基于已知知识库,对某个问题进行逻辑推理,给出答案。
什么是REPL?
Read - Eval - Print - Loop
读取 - 执行 - 打印输出 - 循环这个过程
有时候翻译成交互式解释器。就是你往REPL里输入一行代码,它立即给你执行结果。而不用像C++, Java那样通常需要编译才能看到运行结果。
在 Prolog 中,小写字母开头的单词是常量,表示一个对象,如 like 、mercury、kathy 都不需要预先定义,不需要赋值,直接写即可。
例:苏格拉底会不会死?
利用前面这些知识,就可以解决很多逻辑问题了,例如,已知:
苏格拉底是人
人都会死
所以可以退出结论:苏格拉底会死。
用 Prolog 来解决这个问题:
person(socrates).
person(plato).
person(aristotle).
mortal(X):-person(X).
%查询
mortal_report:-
write('known mortals are:'),nl,mortal(X),write(X),nl.
?-mortal(socrates).
true.
?-mortal(X).
socrates.









