[解決済み] 依存型タイピングとは?
2022-10-28 20:07:07
質問
依存型付けについて教えてください。 Haskell, Cayenne, Epigramなどの関数型言語の経験がほとんどないので、簡単な言葉であればあるほどありがたいです!
どのように解決するのですか?
考えてみてください。まともなプログラミング言語であれば、関数を書くことができ、例えば
def f(arg) = result
ここで
f
は値をとります。
arg
を受け取り、値を計算する。
result
. これは値から値への関数である。
さて、言語によってはポリモーフィック(別名ジェネリック)な値を定義することができます。
def empty<T> = new List<T>()
ここで
empty
は型を取ります。
T
を受け取り、値を計算する。これは型から値への関数である。
通常、汎用的な型定義も可能です。
type Matrix<T> = List<List<T>>
この定義は型を受け取り、型を返します。これは、型から型への関数と見なすことができます。
普通の言語が提供するものはここまでです。4番目の可能性、すなわち値から型への関数を定義することもできる言語を依存型言語と呼ぶ。言い換えれば、値に対する型定義のパラメータ化です。
type BoundedInt(n) = {i:Int | i<=n}
いくつかの主流の言語では、混同しないように、このような偽の形式をとっています。例えば、C++では、テンプレートはパラメータとして値を取ることができますが、適用されるときにはコンパイル時の定数でなければなりません。真に依存型言語ではそうではない。例えば、上の型をこんな風に使うことができる。
def min(i : Int, j : Int) : BoundedInt(j) =
if i < j then i else j
ここでは、関数の結果型
が依存します。
は実際の引数値
j
に依存するため、このような用語が使われています。
関連
-
[解決済み] 関数型言語における「パターンマッチング」とは?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] Hindley-Milnerのどの部分が理解できないのでしょうか?
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】関数型プログラミングのソフトウェア工学の方法論はありますか?[クローズド]
-
[解決済み】Haskellの入門編
-
[解決済み] ヒンドレーミルナーとは?
-
[解決済み] Swiftの配列に対する集合演算(union, intersection)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Y-combinatorとは?[クローズド]
-
[解決済み】関数型プログラミングのソフトウェア工学の方法論はありますか?[クローズド]
-
[解決済み】なぜ関数型プログラミングはまだ浸透していないのでしょうか?
-
[解決済み】手続き型プログラミングと関数型プログラミングの違いは何ですか?[クローズド]
-
[解決済み] ステートレス・プログラミングのメリット?
-
[解決済み] First Class FunctionとHigh Order Functionの違いについて
-
[解決済み] ヒンドレーミルナーとは?
-
[解決済み] Scalaのパス依存型とはどういう意味ですか?
-
[解決済み] 関数型プログラミングにおける「ポイントフリー」スタイルとは?
-
[解決済み] Swiftの配列に対する集合演算(union, intersection)?