【发布时间】:2020-03-14 16:53:37
【问题描述】:
我有一个快速的问题,我一直试图在 Prolog 中弄清楚。有什么方法可以检查谓词中至少 X 次失败(或通过)?
例如,在这里我可以检查其中一个分数是否小于或等于 20,但我试图同时检查所有分数,其中至少一个小于或等于 20,无需指定 3 个不同的谓词检查第一个分数,然后分别检查第二个和第三个。
scores(score1, 14, 60, 45).
# Checks to see if at least one of the scores is less than or equal to 20
at_least_one_fail(X):- scores(X, Y), Y > 20, scores(X, Z), Z > 20, scores(X, J), J =< 20.
at_least_one_fail(X):- scores(X, Y), Y > 20, scores(X, Z), Z =< 20, scores(X, J), J > 20.
at_least_one_fail(X):- scores(X, Y), Y =< 20, scores(X, Z), Z > 20, scores(X, J), J > 20.
(非常糟糕的代码示例,但希望它能够解决我的问题)。
感谢任何想法,谢谢。
【问题讨论】:
-
@GuyCoder 谢谢,但我的理解是 maplist 针对一个目标检查列表中的每个元素。因此,如果我想检查 2 个元素是否符合标准,我将无法做到这一点。
标签: prolog partitioning data-partitioning