如何使用AND,NOT和>

时间:2017-06-23 08:14:10

标签: racket logic-programming

这是关于逻辑编程来自计算机程序的结构和解释

这是了解如何获得最高价值的一个简单问题。

这是一个示例数据库:

((is-student Anna)
(is-student  Bart)
(is-student  Charlie)
(is-student  David)
(is-student  Eddy)
(is-student  Fanny)

(has-points Anna    73)
(has-points Bart    84)
(has-points Charlie 65)
(has-points David   34)
(has-points Eddy    85)
(has-points Fanny   70))

我理解以下代码总结了学生们的观点:

;;; Query input:
(and (is-student ?student1)
       (has-points ?student1 ?points1))

;;; Query results:
(and (is-student fanny) (has-points fanny 70))
(and (is-student eddy) (has-points eddy 85))
(and (is-student david) (has-points david 34))
(and (is-student charlie) (has-points charlie 65))
(and (is-student bart) (has-points bart 84))
(and (is-student anna) (has-points anna 73))

与AND&组合相同或者可以理解。它主要处理组合并过滤掉结果。

我很难理解下面的代码让学生获得最高分。它看起来很简单,但我不明白如何与AND&组合。不是& "> point2 points1"提供最大的价值(分)?

这是我运行时(在DrRacket中)获得最高分的学生所得到的:

;;; Query input:
(and (is-student ?student1)
       (has-points ?student1 ?points1)
       (not (and (is-student ?student2)
                 (has-points ?student2 ?points2)
                 (lisp-value > ?points2 ?points1))))

;;; Query results:
(and (is-student eddy) 
     (has-points eddy 85) 
     (not (and (is-student ?student2) 
               (has-points ?student2 ?points2) 
               (lisp-value > ?points2 85))))

如何将第二个列表的否定与第一个列表进行比较? 第一个结果的每个答案/行是否与第二个AND的每一行相比? 我不知道如何阅读/解释代码以及为什么这会给我们搜索的内容?

任何有助于了解如何提供最高价值的帮助都将受到高度赞赏!

由于

PS:我不是英语母语人士,我为任何语法错误或拼写错误道歉

1 个答案:

答案 0 :(得分:0)

在我看来,我可以对此有一个解释:我有一个有点1 的学生1 存在存在的情况具有point2 point2的point2大于point1。 粗体完美匹配代码。 希望这可以帮助你,我也不是英语母语者:)