haskell - 如何使用 Haskell 库 Linear 缩放向量?

标签 haskell haskell-linear

这是一个关于风格的简单问题。我一直在使用:

import Linear
point  = V3 1 2 3
scaled = fmap (* 2) point

或者...
scaled = (* 2) <$> point

这是预期的方式,还是标量运算符有适当的乘法?

最佳答案

linear库导出 Num a => Num (V3 a) 的实例,所以你实际上可以做

> point * 2
V3 2 4 6

如果您使用 GHCi,您可以看到 2 :: V3 Int 的含义:
> 2 :: V3 Int
V3 2 2 2

于是执行fromIntegerV3看起来像
fromInteger n = V3 n' n' n' where n' = fromInteger n

这意味着你可以做这样的事情
> point + 2
V3 3 4 5
> point - 2
V3 (-1) 0 1
> abs point
V3 1 2 3
> signum point
V3 1 1 1
> negate point
V3 (-1) (-2) (-3)
V3还实现了 Fractional ,所以你应该可以使用 /和公司。当您的点包含 Fractional 时值。但是,使用fmap更通用,您可以转换您的 V3 Int进入 V3 String , 例如:
> fmap show point
V3 "1" "2" "3"
fmap function 将让您应用 a -> b 类型的函数到 V3 a获得 V3 b对输出类型没有任何限制(必然如此)。使用 fmap没有错,只是不如使用普通算术运算符可读。不过,大多数 Haskellers 阅读它不会有任何问题,fmap是一个非常通用的工具,几乎适用于所有类型。

关于haskell - 如何使用 Haskell 库 Linear 缩放向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906115/

相关文章:

haskell - "Linear"使用 `normalize` 时包截断值接近 0

haskell - 为什么这里的早期术语不被垃圾收集?

haskell - 在列表上使用不同的排序

haskell - Haskell 中的 OCaml 仿函数(参数化模块)仿真

haskell - 在 Haskell 中求解方程

security - 针对冷启动攻击 : how to restrain sensitive information in Haskell

haskell - 如何在 Haskell 上通用地派生 Additive,而不定义 Applicative 实例?