發現乙個非常不錯的資源:
良心翻譯啊,介面也簡單明瞭
1.優先順序
infixl 6_+_infixr 7 _*_
定義加法是左結合的 優先順序6
定義乘法是右結合的 優先順序7
依賴函式 (dependent functions)
概念有點抽象...指的是 b 的型別依賴於某乙個其它型別的值 a
比如說 a 是個 nat ,a = 5 ,b 是 int [5] ,那麼就認為 b 依賴 a
好像不太恰當,將就吧
identity : (a : set) -> (a : a) ->aidentity a x =x
(x : a) -> b x 表示接受 a 型別的輸入並返回 b x 型別的輸出
隱式引數
id : -> a ->a
id x =x
相當於底下實現的時候就不宣告型別了,讓編譯器自己推導
_o_ : -> -> ->(f : (y : b x) -> c x y)(g : (x : a) -> b x)(x : a) ->c x (g x)
(f o g) x = f (g x)
函式的復合
資料型別族(data type family)
data vec (a : set) : nat -> set where: vec a zero
_::_ : -> a -> vec a n ->vec a (suc n)
head : -> vec a (suc n) ->a
head (x :: xs) =x
vmap : -> (a -> b) -> vec a n ->vec b n
vmap f =
vmap f (x :: xs) = f x :: vmap f xs
data list (a : set) : set where: list a
_::_ : a -> list a ->list a
map : -> (a -> b) -> list a ->list b
map f =
map f (x :: xs) =f x :: map f xs
_++_ : -> list a -> list a ->list a
++ ys =ys
(x :: xs) ++ ys = x :: (xs ++ ys)
這個就和 haskell 差不多了
點模式匹配:靜態可推導資訊
data vec2 (a : set) : nat -> set wherenil : vec2 a zero
cons : (n : nat) -> a -> vec2 a n ->vec2 a (suc n)
vmap2 : (n : nat) -> (a -> b) -> vec2 a n ->vec2 b n
vmap2 .zero f nil =nil
vmap2 .(suc n) f (cons n x xs) =cons n (f x) (vmap2 n f xs)
vmap3 : (n : nat) -> (a -> b) -> vec2 a n ->vec2 b n
vmap3 zero f nil =nil
vmap3 (suc n) f (cons .n x xs) = cons n (f x) (vmap3 n f xs)
我現在還太懂(
按同學說來是 check 一下?
似乎沒有什麼大用
助教說 允許兩個模式繫結同乙個變數
荒謬模式匹配
data fin : nat -> set wherefzero : ->fin (suc n)
fsuc : -> fin n ->fin (suc n)
magic : -> fin zero ->a
magic ()
_!_ : -> vec a n -> fin n ->a
!()(x :: xs) ! fzero =x
(x :: xs) ! (fsuc i) = xs ! i
怪異起來了
fin n 定義的是小於 n 的數字
fin zero 沒有定義
所以遇到非法的情況直接寫 () 然後不寫下去
這麼做相當於防止訪問到非法的位址
Python學習筆記 隱式函式與高階函式
lambda關鍵字 x 形參 x 10 返回值 fun lambda x x 10 print fun 10 name awqa def change name x return x sb print change name zst def foo n print n def bar name pr...
scala學習筆記 隱式轉換和隱式引數
隱式轉換 隱式引數 示例 示例1 隱式轉換 object mypredef class richfile val file file object richfile 示例2 隱式轉換 class cclass a c c class b c c def writebook unit object a...
C explicit禁止單參建構函式隱式呼叫
c 中單引數建構函式是可以被隱式呼叫的,主要有兩種情形會隱式呼叫單引數建構函式 1 同型別物件的拷貝構造 即用相同型別的其它物件來初始化當前物件。2 不同型別物件的隱式轉換。即其它型別物件隱式呼叫單引數拷貝建構函式初始化當前物件。比如a a 1 就是隱式轉換,而不是顯示呼叫建構函式,即a a 1 像...