如何以递归或任何其他方式打印所有可能的成绩?

时间:2018-06-03 18:29:25

标签: prolog

好的,我已经实现了谓词N 它的工作原理如下

c1 = coords[:, None]
c2 = coords[:, :, None]
areas = tf.reduce_prod(tf.maximum(
  tf.minimum(c1[..., 1], c2[..., 1]) - tf.maximum(c1[..., 0], c2[..., 0]), 0.), axis=-1)

我想构建一个谓词cost = tf.reduce_sum(areas) - tf.reduce_sum(tf.trace(areas)) ,找出班级中实施show(Name,Grade).的最差学生,然后按?-show(Name,8). Name=Jim; Name=Ann; false ?-show('Jim',Grade). Grade=8; false 返回第二个最差学生,然后第三个像这样

worstGrades(Name,Grade)
  

我认为该解决方案与使用(0,10)的Grades变量递归访问show(Name,Grade)有关,但我现在无法想到这样做的方法。任何帮助?

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

show('Jim',8).
show('Anne',8).
show('bob',6).
show('fred',7).


worst_grades(Name,Grade):-
    setof(Grade-Name,show(Name,Grade),Grades),
    member(Grade-Name,Grades). 

查询:

?-worst_grades(Name,Grade).
Grade = 6,
Name = bob;
Grade = 7,
Name = fred;
Grade = 8,
Name = 'Anne';
Grade = 8,
Name = 'Jim'