Seven More Languages in Seven Weeks (读书笔记):Idris
2016-03-30 18:38
459 查看
Idris
Day 1基本上还是Haskell的语法?
*functions> :t map
Prelude.Functor.map : Functor f => (a -> b) -> (f a) -> f b
map (\x => x * 0.5) (the (List Float) [3.14, 2.78])
数据类型:idris/day1/data_types.idr
data DumbNumber = Naught | One | Two | Threedata MyList a = Blank | (::) a (MyList a)
data Maybe a = Nothing | Just a
Day 2:Dependent Types?(对value施加更多的约束)
data Vect : Nat -> Type -> Type where //Vect is indexed by Nat and parameterized by Type
Nil : Vect Z a(::) : a -> Vect k a -> Vect (S k) a(++) : Vect n a -> Vect m a -> Vect (n + m) a //新的类型声明
data so : Bool -> Type where
oh : so Trueso是依赖于Bool的类型(or 索引,indexed over Bool)
(我感觉这种编译器的依赖类型约束推理其实给程序员增加了额外的复杂性,不见得有多高明)
Day 3
> idris proof.idr
*proof> :e
show plus x y等于plus y x(加法交换律):
plus Zero y = plus y Zero
If plus x y = plus y x , then plus (Suc x) y = plus y (Suc x)
proof.idr:
plusZero : (x : Natural) -> plus x Zero = xplusSuc : (x : Natural) -> (y : Natural) -> Suc (plus x y) = plus x (Suc y)
Idris> :l proof.idr
*proof> :m*proof> :p plusCommutes_0_y-Proof.plusCommutes_0_y> intros(称为策略?)-Proof.plusCommutes_0_y> rewrite (plusZero y)-Proof.plusCommutes_0_y> trivial-Proof.plusCommutes_0_y> qed
总结:plusCommutes_0_y = proof {
introsrewrite (plusZero y)trivial}
接下来,*proof> :p plusCommutes_Sx_y
-Proof.plusCommutes_Sx_y> intros-Proof.plusCommutes_Sx_y> rewrite (plusSuc y x)定义hypothesis变量:plusCommutes (Suc x) y = let hypothesis = plusCommutes x y in ?plusCommutes_Sx_y-Proof.plusCommutes_Sx_y> rewrite hypothesis-Proof.plusCommutes_Sx_y> trivial-Proof.plusCommutes_Sx_y> qed
辅助C++类型设计?
相关文章推荐
- PHP中的类型约束介绍
- 你需要掌握的三种编程语言
- NB的小日本
- F#入门-第一章 概述-第二节 关于F#
- Thirft框架介绍
- 好的程序员应该熟悉的几门编程语言 .
- C#和Java的区别(转载)
- 杨辉三角
- 为程序员量身定制的12个目标
- C和Java哪种语言更好?
- 国际:4月语言排行榜出炉 ColdFusion “死而复生”
- 编程技能和做员工的技能——哪个更重要?
- 康托尔、哥德尔、图灵——永恒的金色对角线
- poppush下Haskell支持结对编程与测试——王华清
- 2008年计划
- Haskell -- 用foldr表示foldl
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.1, No.2
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.3, No.4
- Project Euler -- 欧拉题集 F#及Haskell 版 - No.5, No.6
- Project Euler -- 欧拉题集 F#及Haskell 版 - No.7, No.8