Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 是否检查X个故障/通过?_Prolog_Partitioning_Data Partitioning - Fatal编程技术网

Prolog 是否检查X个故障/通过?

Prolog 是否检查X个故障/通过?,prolog,partitioning,data-partitioning,Prolog,Partitioning,Data Partitioning,我有一个快速的问题,我一直想在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_leas

我有一个快速的问题,我一直想在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.
分数(1分、14分、60分、45分)。
#检查是否至少有一个分数小于或等于20
至少一次失败(X):-分数(X,Y),Y>20,分数(X,Z),Z>20,分数(X,J),J=<20。
至少一次失败(X):-分数(X,Y),Y>20,分数(X,Z),Z=<20,分数(X,J),J>20。
至少一次失败(X):-分数(X,Y),Y=<20,分数(X,Z),Z>20,分数(X,J),J>20。
(非常糟糕的代码示例,但希望它能理解我的问题)


感谢您的任何想法。

这里是一个使用事实和数据的大致答案

示例运行

?- test(Scores).
Scores = [60, 45].
?- test_2(Greater,Less).
Greater = [60, 45],
Less = [14].

另一种方法是使用列表和

示例运行

?- test(Scores).
Scores = [60, 45].
?- test_2(Greater,Less).
Greater = [60, 45],
Less = [14].

@GuyCoder谢谢你,但我的理解是maplist根据一个目标检查列表中的每个元素。因此,如果我想检查,比如说,两个元素是否符合标准,我就不能这样做。