【问题标题】:Prolog return certain permutationsProlog 返回某些排列
【发布时间】:2018-05-24 18:51:58
【问题描述】:

我有一个谓词 schedule(A,B,C),它返回列表 A、B、C 的可能排列并回溯

?- schedule(A,B,C).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216] ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216] ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217] ?

我还有谓词 schedule_errors(A,B,C,E) 从列表 A、B、C 到 E 返回错误(不要介意错误是什么)。

?- schedule_errors([im204, im209, im210], [im212, im214, im217], [im216, im218]).
E = 4 ?

在我的新谓词中

schedule_all_errors(A,B,C,E):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E).

它返回可能的排列以及错误号

?- schedule_all_errors(A,B,C,E).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216]
E = 14 ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216]
E = 6 ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217]
E = 12 ?

我想知道是否有一种方法可以只返回零错误的排列。 (或不返回任何错误不等于 0 的排列)

【问题讨论】:

  • 为什么不复制粘贴您的查询?这些图像对于盲人来说很难阅读,并且无法被索引以进行搜索。 Imgurl 甚至可能会在某个时候取消它们。
  • 对不起,我是新手,我会记住这一点:)
  • 刚刚编辑了图片,看看源代码是如何嵌入源代码的(4个空格或在反引号之间)

标签: prolog return permutation


【解决方案1】:

把这个条件加到最后就行了

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E),
   E = 0.

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,0).

第二个是否有效取决于schedule_errors 的定义。

【讨论】:

  • 我觉得真的很愚蠢...E = 0 条件完成了这项工作,谢谢
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
相关资源
最近更新 更多