関係代数(3)
Template Haskell でコード生成を行うようにしたので、関係演算の実装に戻る。
project 演算は、集合に対する演算と見なせば以下のように単純に実装できる。
project :: (Eq a, Eq b) => (a -> b) -> R a -> R b project f (R s) = R (S.map f s)
実例は以下の通り。
>>> :t suppliers suppliers :: R (T4 SNO NAME Integer [Char]) >>> project (\ (T4 x y _ _) -> T2 x y) suppliers SNO:THRelational.SNO SNAME:THRelational.NAME -------------------------------------------- S1 Smith S2 Jones S3 Blake S4 Clark S5 Adams
Tutorial D では、もっと簡潔に SUP { SNO, SNAME} と書ける。