我计划编写一个简单的游戏来测试我对函数式编程的理解。使用函数式编程方式进行主循环的方法是通过递归实现,但是随着生成更多的堆栈帧,这样做会消耗更多的内存,对吗?
谢谢。
以下是来自如何在没有可变状态的情况下执行任何有用操作?的示例。
// imperative version
pacman = new pacman(0, 0)
while true
if key = UP then pacman.y++
elif key = DOWN then pacman.y--
elif key = LEFT then pacman.x--
elif key = UP then pacman.x++
render(pacman)
// functional version
let rec loop pacman =
render(pacman)
let x, y = switch(key)
case LEFT: pacman.x - 1, pacman.y
case RIGHT: pacman.x + 1, pacman.y
case UP: pacman.x, pacman.y - 1
case DOWN: pacman.x, pacman.y + 1
loop(new pacman(x, y))