2017-04-10 76 views

回答

2

非自反傳遞閉包操作者是^foo.^bar是關於bar非自反傳遞封閉foo。通過將.bar應用於foo一次或多次,這將返回您可以生成的所有東西的集合。例如,foo.^bar等於下列用語的工會:

foo.bar 
    foo.bar.bar 
    foo.bar.bar.bar 
    foo.bar.bar.bar.bar 
    ... 

這份名單是無限的。

反身傳遞封閉運營商是*foo.*bar自反傳遞封閉foo相對於bar。這將返回您可以生成的所有東西的集合,將.bar應用於foo零次或多次。例如,foo.*bar等於下列用語的工會:

foo 
    foo.bar 
    foo.bar.bar 
    foo.bar.bar.bar 
    ... 

這份名單也是無限的。這相當於foo + foo.^bar

0

兩個transitive closure^)和reflexive transitive closure*)是一元運算符其可僅被應用到操作數是二元關係

一個二元關係 bar

傳遞閉包是被定義爲一個二元關係bar

^bar = bar + bar.bar + bar.bar.bar + ... 

自反傳遞閉包一個二元關係被定義爲

*bar = iden + ^bar 

一個二元關係,其中iden是單位二元關係。

兩個傳遞閉包操作符的最常見的使用模式是它在前面是關係連接時,如@LEJ提供的示例中的那樣:foo.^barfoo.*bar。值得注意的是,在.^.*中沒有任何魔術:點運算符(.)是舊的關係連接,並且^*運算符是上面定義的閉包運算符。所以,如果你的工作方程式,你將在同一表達式爲到達和foo.^barfoo.*bar已經@LEJ提供:

foo.^bar = foo.(^bar) = foo.(bar + bar.bar + ...) = foo.bar + foo.bar.bar + ... 
foo.*bar = foo.(*bar) = foo.(iden + bar + bar.bar + ...) = foo + foo.bar + foo.bar.bar + ...