给出二元关系R.在LISP中构造传递和反身闭包R *

时间:2017-10-16 18:03:24

标签: lisp

给出二元关系R.构造传递和反身封闭 R *。在LISP ////怎么来的?

1 个答案:

答案 0 :(得分:0)

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

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

让我们假设您有一个函数R,其行为如下:

  • (funcall R :x X :y Y)返回非零值iff 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等于{{1}或者,您可以递归地确定Z

实施并测试后,尝试检测周期。