【问题标题】:check that a relation is symmetric in haskell检查haskell中的关系是否对称
【发布时间】:2014-05-07 04:22:48
【问题描述】:

我想使用haskell package for relations。

如何检查关系是否对称?即,给定关系的函数返回 true,如果对于所有 a b,a rel b 意味着 b rel a。

【问题讨论】:

    标签: haskell relation


    【解决方案1】:

    我之前没有使用过关系包,但看起来这样可以:

    import Data.Relation
    
    symmetric :: Ord a => Relation a a -> Bool
    symmetric rel = and [member b a rel | (a, b) <- toList rel]
    

    测试:

    > symmetric $ fromList [(1, 2), (2, 1)]
    True
    > symmetric $ fromList [(1, 2), (2, 3)]
    False
    

    【讨论】:

      【解决方案2】:
      import Data.Relation
      
      swap :: (a, b) -> (b, a)
      swap (a, b) = (b, a)
      
      inverse :: (Ord a, Ord b) => Relation a b -> Relation b a
      inverse = fromList . map swap . toList
      
      symmetric :: Ord a => Relation a a -> Bool
      symmetric r = r == inverse r
      

      【讨论】:

      • 也许导入交换功能?它在 Data.Tuple...swap :: (a, b) -> (b, a)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2020-06-21
      相关资源
      最近更新 更多