【问题标题】:Prolog Domain of activityProlog 活动域
【发布时间】:2014-04-06 07:26:23
【问题描述】:

我找到了一个 Prolog 程序并阅读了一些关于 AI 编程的信息。我的程序是:

causes(measles, spots).
causes(mumps, swollen_glands).

known(spots).

diagnosis(Symptom,Disease) :-
    causes(Disease,Symptom),
    known(Symptom).

它的文件名是:

ex.pl

当我在 Linux 上运行此命令时:

swpl ex.pl

我得到这个提示

?-

我的问题是,除了得到正确或错误的答案之外,我怎么能从中提出问题?比如“引起斑点的疾病名称是什么?”或者当我删除以下行时会发生什么:

known(spots).

或者有什么有趣的问题可以问吗?

【问题讨论】:

    标签: prolog


    【解决方案1】:

    快速回答“导致斑点的疾病名称是什么?” (注意Disease中的大写):

    ?- causes(Disease, spots).
    Disease = measles.
    

    更长的答案:Prolog 是一种逻辑编程语言。这意味着您的程序代码是普遍量化的。例如,以下代码声明“所有导致已知症状的疾病都以该症状为诊断”。

    diagnosis(Symptom,Disease) :-
      causes(Disease,Symptom),
      known(Symptom).
    

    您在顶层的查询是存在量化的。例如causes(Disease, spots) 询问“是否有导致斑点的疾病?”。

    以下也是普遍量化的(因为它们属于程序代码)。但由于它们不包含要量化的变量,因此它们是事实。

    causes(measles, spots).
    causes(mumps, swollen_glands).
    known(spots).
    

    PS:请注意,您的代码没有说明什么是疾病和症状。这仅从您选择的变量名称中显而易见。

    【讨论】:

    • 感谢您的回答,我该如何说明疾病和症状是什么?
    • @user38322 “成为一种疾病”和“成为一种症状”是属性。它们由一元谓词表示。在代码中:disease(measles).symptom(spots).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多