请参见官方用户手册获取此页面上信息的最新版本。
总有机碳
编写函数类型(x:A)->B
,或在非依赖函数的情况下A->B
例如,自然数加法函数的类型为
自然->自然->自然
向量的加法函数的类型为:
(A:集合)->(n:自然)->(u:血管A n)->(v:血管A n)->血管A n
哪里设置
是集合的类型兽医
是向量的类型n个
类型的元素A类
.表格连续假设之间的箭头(x:A)
也可以省略,以及(x:A)(y:A)
可以缩写为(x y:A)
:
(A:设置)(n:自然)(u v:血管A n)->血管A n
函数由lambda抽象构造,可以是类型化的,也可以是非类型化。例如,下面的两个表达式都有类型(A:设置)->A->A
(第二个表达式也会检查其他类型):
\(A:设置)(x:A)->x\A x->x
应用程序编写为金融资产负债表
哪里(f)
是一个函数,并且一
,b条
和c(c)
都是参数。
函数声明
定义函数的一般形式是
f:(x1:A1) -> ... -> (x)n个:An个)->B法珀1…pn个=天...f q(平方英尺)1…问题n个=电子
哪里(f)
是新标识符,A类
是一种类型,B类
是一种假设变量x个
具有类型A类
,p_i
和q_i
是模式和d日
和e(电子)
是表达式。
上面的声明给出了标识符(f)
类型(x)1:A1)->…->(x)n个:An个)->B
和(f)
由定义方程定义。模式从上到下进行匹配,即与实际参数匹配的第一个模式就是使用的模式。
抽象
类型中的对象(x:A)->B
始终等于
\x->b
哪里乙:乙
假设x:A
.
也可以使用类型化抽象:
\(x:A)->b
是上述抽象的另一种表示法,如果变量的类型x个
是A类
.
应用程序
函数的应用f:(x:A)->B
争论答:答
已写入财务报表
这种类型是B[x:=a]
符号惯例
可以使用以下符号约定
(x:A)(y:B)->C与(x:A)->(y:B)->C相同(xy:A)->C与(x:A)(y:A)->C相同对于所有(x:A)->C与(x:A)->C相同对于所有x->C与(x:_)->C相同有孔虫x->C与有孔虫x->有孔虫y->C相同
您还可以使用Unicode符号∀
(类型“\全部
“在Emacs Agda模式下),而不是对于所有人
.
\x y->e与\x->(\y->e)相同
f a b与(f a)b相同
模式匹配lambdas。
可以使用语法定义匿名模式匹配函数
\{p11..p1n->e1;…;pm1..pmn->em}
(其中,和往常一样,\和->可以替换为λ和→). 内部这被转换为以下形式的函数定义:
.extlam第11页。。p1n=e1....extlam pm1。。pmn=em
这意味着匿名模式匹配函数是生成性的。例如,ref不会被接受为该类型的居民
(λ{真→ 真;假→ 假})≡(λ{真→ 真;假→ 错误}),
因为对于一些不同的新名称extlam1和extlam2。
目前,“where”和“with”结构不允许出现在(的顶级子句)匿名模式匹配函数。
示例:
和:布尔→ 布尔→ 布尔和=λ{真x→ x;错误_→ 错误}xor:布尔→ 布尔→ 布尔xor=λ{真-真→ 假; 假假→ 假; _ _ → 真的}fst:{A:Set}{B:A→ 集合}→ ∑A B→ A类fst=λ{(a,b)→ 一个}snd:{A:Set}{B:A→ 集合}(p:∑A B)→ B(fst p)snd=λ{(a,b)→ b}(b)
与通常的布局规则不同,模式匹配lambda的{…}块不能用缩进替换。