08-函数式编程
在前面的几章,我们了解了Alum的基本特性与语法,并能够用这种命令式编程的方式编写一些简单的程序,这一章,我们将介绍Alum的函数式编程特性。总体来说,Alum作为笔者的个人项目,还是一门非常简单的语言,但他也在向函数式语言发展,就现在而言,已经实现了匿名函数与高阶函数两个特性。
匿名函数也常称Lambda函数,顾名思义,它是一个没有名字的函数,遗憾的是,Alum的匿名函数目前还没有实现闭包这个高级特性,也就是捕获外部变量,但也在开发的计划内了,在Alum中,匿名函数的语法如下:
1 | lamb(Pn: PTn, ...): RT expr |
是不是看起来和不同函数很像?是的,它实际上在汇编层面创建了一个_lambda_N的函数,并返回了这个函数的指针,所以可以将这个指针赋值给一个变量,例如
1 | let f: int(int) = lamb(n: int): int return n + 1 |
并通过f()调用这个匿名函数
高阶函数听起来就很高级,但实际上,它就是指一个函数,其参数或返回值也是一个函数,举个简单的例子
1 | fun judge(method: bool(int), a: int): bool { |
在这个例子中,我们定义了函数judge,它接受一个bool(int)类型的函数和一个整数,并判断整数是否符合一定的条件,在main函数中,我们定义了匿名函数gt0,判断给定的整数是否大于0。相信读者一定已经有了初步认知,接下来,我们就可以实现一个有趣的函数:
1 | $import "io.al" |
在03-Types中我们介绍过,gen用于自动类型推导,这样就省略了冗长的类型,这里的函数f执行后会打印Called f()并返会它本身,于是便可以做到通过()的数量控制调用的次数:
1 | fun main() { |
这样就会打印三次Called f()
- Title: 08-函数式编程
- Author: Wan Yutong
- Created at : 2026-02-28 19:21:14
- Updated at : 2026-03-03 11:38:47
- Link: https://cr0.dpdns.org/2026/02/28/08-FP/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments