私は「ユニークなセールスポイント」が依存型のように見えるプログラミング言語Idrisに遭遇しました。どのような依存型があるのか、どのような問題に取り組んでいるのかを誰かが説明できますか?従属型
Q
従属型
2
A
答えて
3
まあ、依存型は、コンパイル時にチェックされるデータ型不変量を表現することを可能にします。従属型の標準的な例は、ベクトルとも呼ばれる長さインデックス付きのリストです。ベクトルのイドリス定義は次のとおりです。
data Vec (A : Type) : Nat -> Type where
Nil : Vec A 0
Cons : A -> Vec A n -> Vec A (S n)
タイプ
Nat
はペアノ表記で自然数に対応
:Vec A
タイプは、我々はタイプファミリー呼んでいる、
data Nat = Z | S Nat
注:各値n : Nat
のために我々タイプVec A n
、長さがn
のベクトルである。
長さがその型であることにより、構造によっていくつかのリスト関数が正しいことが可能になります。我々は唯一の非空のベクトルがhead
関数に渡されることを要求するので
head : Vec a (S n) -> a
head (x :: xs) = x
ヘッドはなることはありませんことをイドリスコンパイラの保証 - - 非ゼロ値のインデックスにS n
需要の点に注意してください。簡単な例では、セーフリストの先頭機能です空のリストに適用されます。連結長プロパティが連結機能の種類によって保証されること
(++) : Vec a n -> Vec a m -> Vec a (n + m)
[] ++ ys = ys
(x :: xs) ++ ys = x :: (xs ++ ys)
注
他の例では、その結果がそのパラメータの長さの和に等しい長さを有することを確実にベクターの連結です。
map : (a -> b) -> Vec a n -> Vec b n
map f [] = []
map f (x :: xs) = f x :: map f xs
ここでも、ベクトル長の保存がmap
型注釈によって保証される:他のアプリケーションは、ベクター上の伝統的なマップ機能は、その長さを保持することを証明することです。これらは、従属型がどのように建設ソフトウェアによって正しいことを保証するのに役立つかの非常に簡単な例です。
依存型プログラミング(Agdaプログラミング言語を使用)のもっと説得力のある例は、The Power of Piにあります。私はこれをしていないが、私はこの論文のすべての例が困難なしでIdrisに移植できると信じている。
関連する問題
- 1. VB.NETの従属型
- 2. haskellの従属型キュー
- 3. C++の従属型、非ゼロ型
- 4. 従属型のインスタンスを表示する
- 5. Scalaの従属型の等価プルーフ
- 6. 従属ブレークポイント
- 7. 従属NSURLConnections
- 8. 関数従属
- 9. 従属セレクトボックス
- 10. 従属変数
- 11. Backbone.jsモデルの従属属性
- 12. チューンSVM - 従属変数が間違った型
- 13. 従属性注入の安全な列挙型
- 14. 従属型のインスタンス間の等価性の証明
- 15. ブーストプログラムオプションの従属オプション
- 16. 従属選択フォーム
- 17. Excelの従属リスト
- 18. Page.RegisterAsyncTaskと従属コード?
- 19. 従属変数woocommerce
- 20. Djangoの従属サブクエリ
- 21. PowerShellの従属バージョンのインストール
- 22. 従属レコードタイプの等価性
- 23. ERD円従属性効率
- 24. Googleフォームの従属ドロップダウン
- 25. MySQLの従属制約
- 26. 従属としてのボレー
- 27. 従属変数付きスカラマップ
- 28. (サブ従属オブジェクトを含む)
- 29. フラット化は、従属変数
- 30. Buck:推移的従属
これはあまりにも広い質問です。 –