私はF#とHaskellを初めて使っており、もっと時間を割くことを好む言語を決定するためにプロジェクトを実装しています。F#とHaskell(依存型)のベクトルの次元数の型制約
私は、与えられた数値型がトップレベル関数に与えられたパラメータに基づいて(つまり、実行時に)次元を与えられることを期待しています。たとえば、このF#のスニペットでは、私が
type DataStreamItem = LinearAlgebra.Vector<float32>
type Ball =
{R : float32;
X : DataStreamItem}
を持っていると私はタイプDataStreamItem
のすべてのインスタンスがD
寸法を有することを期待しています。
私の質問は突き止めるために頭痛をすることができ、このような形状mismatche-バグ以来のアルゴリズム開発とデバッグの利益になるが、アルゴリズムがアップして、実行されている場合非問題にする必要があります:
F#またはHaskellのいずれかに、DataStreamItem
および/またはBall
のサイズをD
に制限する方法がありますか?あるいは、すべての計算でパターンマッチングに頼る必要がありますか?
後者の場合、そのような制約違反が発生するとすぐにそれを捕捉するための優れた軽量パラダイムが存在します(パフォーマンスが重大な場合には削除できます)。
編集:
D
が拘束されたセンス明確にする:
D
を使用すると、計算グラフとして機能main(DataStream)
のアルゴリズムを発現した場合、そのように定義されるが、中間計算の全てmain(DataStream)
の実行のためのD
の次元に依存する。私は考えることができる最も簡単な例では、DataStreamItem
とM
のドット積のようになります。一週間後
、私は見つける:DataStream
の寸法はM
別編集の寸法パラメータの作成を決定するであろう私はHaskellで依存型で探していたものを正確概説次のブログ:
https://blog.jle.im/entry/practical-dependent-types-in-haskell-1.html
そしてAノート: このredditには、Haskellの従属型に関するいくつかの議論があり、R. Eisenbergのかなり興味深いdissertation proposalへのリンクが含まれています。
最後の質問「どの言語を学習する必要がありますか?それは主に意見に基づいているので、ここではStackOverflowのトピック外の質問の例です。 – chi
@chi私は知っている、私はいくつかの皮肉とそれを書きましたが、多分顔文字は十分に強制的にそれを伝えることはありません。 – user2805751
言語コンテストのアスペクトの問題は別として、あなたが実際に何を求めているかはまだ不明です。実際に 'D'はコンパイル時に固定されていますか? – leftaroundabout