给出二元关系R.在LISP中构造传递和反射闭包R *
答
你没有给太多的信息,但通常情况下,给定一个关系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)
。
执行并测试之后,也尝试检测周期。
你能提供更多解释你需要什么? – Rob