如何编写没有可变状态的多客户端服务器?

Nig*_*rne 6 functional-programming immutability

我正在研究函数式编程并且在一点上苦苦挣扎.如何在没有可变状态的情况下执行以下操作?

想象一下,我有一个服务器..并且客户端尝试连接..并且每个客户端为服务器提供一个数字并告知当前总数.

现在没有可变状态,服务器无法保持总数......所以我认为每个客户端实际上都在创建一个包含新总数的新服务器..或者一个新服务器,其中包含该条目并引用旧服务器,因此总数可以是计算.

但是..客户端如何找到服务器?有人必须抓住当前的服务器实例..所以他们有一个可变的变量'server'.

无论我做什么..我总是以一个可变变量结束更高的范围.

思考?

sep*_*p2k 5

您描述的场景可以像这样实现(伪代码):

let keepTrackOfTotal(total) =
    let conn = waitForConnection()
    let x = readIntFrom(conn)
    let newTotal = total + x
    writeIntTo(conn, newTotal)
    keepTrackOfTotal(newTotal)

let main() = keepTrackOfTotal(0)
Run Code Online (Sandbox Code Playgroud)

在这里,我们使用递归来获得一个跟踪总数的无限循环,没有可变变量.