前一段時間,我遇到了「獨特賣點」似乎是依賴類型的編程語言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)
其中type Nat
對應於自然數在皮亞諾的符號:
data Nat = Z | S Nat
需要注意的是,Vec A
類型就是我們所說的家庭類型:每個值n : Nat
我們有一個類型Vec A n
,向量的長度爲n
。
具有其類型的長度允許一些列表函數通過構造來正確。一個簡單的例子是一個安全的表頭功能:
head : Vec a (S n) -> a
head (x :: xs) = x
因爲我們要求只有非空載體傳遞給head
功能 - 注意指數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
類型的註釋確保。這些都是非常簡單的示例,說明依賴類型如何通過構建軟件確保正確。
在The Power of Pi中可找到更令人信服的依賴型編程(使用Agda編程語言)的示例。我沒有這樣做,但我相信這篇論文的所有例子都可以毫無困難地移植到伊德里斯身上。
相關問題
- 1. 類型類和相關類型
- 2. 相關類和類型
- 3. 相關的方法類型和類型
- 4. 瞭解相關類型
- 5. 協議相關的類型和泛型
- 6. 相同類型的多個關係類
- 7. 具有相關泛型類型的泛型類不能專用?
- 8. 與類型鑄造相關的JLS
- 9. 包含派生模型相關類
- 10. 從auth.models.User獲取相關模型類
- 11. 鏽+鏽圖片 - 私人'相關類型'?
- 12. 根據類型的相關表問題
- 13. 問題與兩個相關模型類
- 14. 相關的namedtuple類型名的
- 15. 哈斯克爾 - 相關類型
- 16. Laravel負載相關的類模型
- 17. 相關類型:矢量矢量
- 18. 如何動態創建相關類型?
- 19. 相關方法類型的衝突
- 20. 上溯造型相關 - 類轉換
- 21. 相關類型字段不顯示值
- 22. 奇怪類型相關的錯誤
- 23. 類型錯誤與分數相關
- 24. 相關車型
- 25. XSD上下文相關類型;包裝類型
- 26. C++中的相關類型,非零類型
- 27. 類型綁定爲兩個不相關的類型
- 28. Designning相關類
- 29. Yii2。相關車型
- 30. yii2相關模型
這是一個太寬泛的問題。 –