2017-10-16 44 views

回答

0

你没有给太多的信息,但通常情况下,给定一个关系R的传递和R的自反闭包是*定义如下关系R:

  • 所有的X,Y使得R (X,Y),关系R *(X,Y)也成立;对于所有X,Y,Z使得R(X,Y)和R *(Y,Z),关系R *(X,Z)成立的所有X,Y,

假设你是如下给出一个函数R,其行为:

  • (funcall R :x X :y Y)返回一个非零值当且仅当R(X,Y)
  • (funcall R :x X)回报所有的Y使得R (X,Y)
  • (funcall R :y Y)返回所有的X,使得R(X,Y)
  • (funcall R)返回(X。Y)对的列表,其中:R(X,Y)。

然后,你可以建立一个函数,计算传递和反射闭包;如果你想知道R*(X,Z)是否成立,你可以从X开始,尝试所有可能的Y,它们满足R(X,Y),直到Y等于Z,或者你可以递归确定R*(Y,Z)

执行并测试之后,也尝试检测周期。