作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止,我的想法是:
类型
超立方体是从一个或多个维度到某个值的(离散)函数。我想为维度使用枚举类型,最终得到了这个类型类:class (Eq a, Ord a, Show a, Enum a, Bounded a) => Dimension a
这让我可以使用它
data Age = Young | Adult | Old deriving (Eq, Ord, Show, Enum, Bounded)
instance Dimension Age
Double
然后有类型
cube2D :: (Dimension a, Dimension b) => a -> b -> Double
cube2D' p a = cube2D a p
arguments :: Dimension a => [a]
arguments = enumFrom minBound
results :: (Dimension a) => (a -> r) -> [r]
results cube = fmap cube arguments
sum2D :: (Dimension a, Dimension b, Num r) => (a->b->r) -> a -> r
sum2D = fmap (sum . results)
sum2D
仅适用于具有二维的多维数据集。我可以为 3D 立方体编写一个类似的函数,为 4D 立方体编写另一个函数。我怀疑大多数尚未实现的操作将面临同样的问题。这意味着,我对 Hypercube 的抽象并不真正值得它的盐。
最佳答案
不知道是什么 Eq
和 Ord
限制是,但我会替换 Enum
和 Bounded
来自 Finite
.例如:
{-# LANGUAGE DeriveAnyClass #-}
data Age = Young | Adult | Old deriving (Enum, Bounded, Universe, Finite)
instance (Finite a, Finite b) => Finite (a, b)
instance Finite ()
a -> b -> Double
, 使用
(a,(b,())) -> Double
.现在您可以旋转 n 维事物的前两个维度:
rotate :: ((a,(b,c)) -> r) -> ((b,(a,c)) -> r)
rotate cube2D (p,(a,rest)) = cube2D (a,(p,rest))
sumNd :: (Finite a, Num r) => (a->r) -> r
sumNd f = sum [f a | a <- universeF]
关于haskell - 如何在 Haskell 中建模 OLAP 超立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853288/
我是一名优秀的程序员,十分优秀!