gpt4 book ai didi

recursion - 函数式编程,递归游戏状态循环

转载 作者:行者123 更新时间:2023-12-02 18:02:06 25 4
gpt4 key购买 nike

我计划编写一个简单的游戏来测试我对函数式编程的理解。执行主循环的功能方法是递归它,但是随着生成越来越多的堆栈帧,这不会消耗内存吗?

谢谢

来自 How can you do anything useful without mutable state? 的示例

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

最佳答案

您已使用 tail recursion 实现了 loop 函数,即对 loop 的递归调用是函数中的最后一件事。这允许编译器/解释器(取决于语言)立即弹出当前堆栈帧并将其替换为递归调用的帧。

长话短说,按照您的实现方式,不会出现堆栈溢出,并且 loop 可以根据需要运行多久。

关于recursion - 函数式编程,递归游戏状态循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com