给出了二元关系R构造传递反自反闭包
R*在lisp中///为什么?
最佳答案
你没有给出很多信息,但是通常,给定关系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)
返回(XY)R(X,Y)的对。
然后你可以建立一个计算传递和反身关闭的函数;如果你想知道R*(X,Z)
是否成立,你可以从X
开始,尝试满足Y
的所有可能的R(X,Y)
,直到Y
等于Z
,或者你可以递归地确定R*(Y,Z)
。
在您实现并测试之后,也尝试检测周期。