これはスタイルに関する簡単な質問です。私が使用してきた:HaskellライブラリLinearを使用して、どのようにベクトルをスケーリングしますか?
import Linear
point = V3 1 2 3
scaled = fmap (* 2) point
それとも...
scaled = (* 2) <$> point
が、これは意図した方法である、またはスカラーオペレータによる適切な乗算はありますか?
これはスタイルに関する簡単な質問です。私が使用してきた:HaskellライブラリLinearを使用して、どのようにベクトルをスケーリングしますか?
import Linear
point = V3 1 2 3
scaled = fmap (* 2) point
それとも...
scaled = (* 2) <$> point
が、これは意図した方法である、またはスカラーオペレータによる適切な乗算はありますか?
あなたはGHCiのを使用している場合は、実際には、あなたはそれが2 :: V3 Int
のために何を意味するのか
> point * 2
V3 2 4 6
見ることができないことができるようにlinear
ライブラリは、Num a => Num (V3 a)
のインスタンスをエクスポート:
> 2 :: V3 Int
V3 2 2 2
ので、実装をfromInteger
はV3
のようになります
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
機能を使用すると、任意の制限なしV3 b
を取得するためにV3 a
にタイプa -> b
の機能を適用できます出力タイプに(必然的に)。 fmap
を使用するのは間違っているわけではありません。通常の算術演算子を使用する場合ほど読みにくいです。ほとんどのハスケラーはそれを読むのに何の問題もありませんでしたが、fmap
は、ほぼすべてのタイプのために現れる非常に一般的なツールです。
ああ。それは扱いにくいです、私はタイプが非常に柔軟であるとは予想せず、 "スケール"機能を探していました。これは完全に意味をなさない。ありがとうございました。 – MaiaVictor
@Viclib:そうですね。それは_some_ senseになりますが、実際には "完全な意味"ではありません。その「Num」インスタンスは数学的にむしろ冒険的です。もちろん、Edwardは自分がやっていることを知っていますが、より良いインターフェースのために[ベクトル空間パッケージ](http://hackage.haskell.org/package/vector-space)をお勧めします。スケーリングは['* ^'](http://hackage.haskell.org/package/vector-space-0.8.7/docs/Data-VectorSpace.html#v:-42--94-)で表示されます。 – leftaroundabout
['linear'](https://hackage.haskell.org/package/linear-1.16)パッケージは' Data.Linear'をエクスポートしません。使用しているライブラリにリンクできますか? – bheklilr
Woops、それはタイプミスでした。ありがとう。 – MaiaVictor
https://hackage.haskell.org/package/linear-1.20.7/docs/Linear-Vector.html#v:scaled – SwiftsNamesake