agda學習筆記 依賴函式 隱式引數 模式匹配

2022-09-07 05:45:08 字數 2240 閱讀 5962

發現乙個非常不錯的資源:

良心翻譯啊,介面也簡單明瞭

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) ->a

identity 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 where

nil : 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 where

fzero : ->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 像...