08-函数式编程

Wan Yutong Lv2

在前面的几章,我们了解了Alum的基本特性与语法,并能够用这种命令式编程的方式编写一些简单的程序,这一章,我们将介绍Alum函数式编程特性。总体来说,Alum作为笔者的个人项目,还是一门非常简单的语言,但他也在向函数式语言发展,就现在而言,已经实现了匿名函数高阶函数两个特性。

  1. 匿名函数

匿名函数也常称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. 高阶函数

高阶函数听起来就很高级,但实际上,它就是指一个函数,其参数或返回值也是一个函数,举个简单的例子

1
2
3
4
5
6
7
8
9
10
11
fun judge(method: bool(int), a: int): bool {
return method(a)
}

fun main() {
let n: int = 1
let gt0: bool(int) = lamb(n: int): bool {
return n > 0
}
let result: bool = judge(gt0, n)
}

在这个例子中,我们定义了函数judge,它接受一个bool(int)类型的函数和一个整数,并判断整数是否符合一定的条件,在main函数中,我们定义了匿名函数gt0,判断给定的整数是否大于0。相信读者一定已经有了初步认知,接下来,我们就可以实现一个有趣的函数:

1
2
3
4
5
6
$import "io.al"

fun f(): gen {
println("Called f()")
return f
}

03-Types中我们介绍过,gen用于自动类型推导,这样就省略了冗长的类型,这里的函数f执行后会打印Called f()并返会它本身,于是便可以做到通过()的数量控制调用的次数:

1
2
3
fun main() {
f()()()
}

这样就会打印三次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
On this page
08-函数式编程