Esta é principalmente uma questão teórica sobre FP, mas vou fazer aventuras em texto (como Zork da velha escola) para ilustrar meu argumento. Eu gostaria de saber suas opiniões sobre como você modelaria uma simulação estável com o FP.
As aventuras em texto realmente parecem exigir POO. Por exemplo, todas as "salas" são instâncias de uma Roomclasse, você pode ter uma Itemclasse básica e interfaces como Item<Pickable>as que você pode carregar e assim por diante.
A modelagem do mundo no FP funciona de maneira diferente, especialmente se você deseja imutar um mundo que deve sofrer mutações à medida que o jogo avança (objetos são movidos, inimigos são derrotados, a pontuação aumenta, o jogador muda sua localização). Eu imagino um único objeto grande Worldque tem tudo: quais são as salas que você pode explorar, como elas estão conectadas, o que o jogador está carregando, quais alavancas foram acionadas.
Penso que uma abordagem pura seria basicamente passar esse grande objeto para qualquer função e devolvê-lo (possivelmente modificado). Por exemplo, eu tenho uma moveToRoomfunção que obtém Worlde retorna com a World.player.locationalteração para a nova sala, World.rooms[new_room].visited = Truee assim por diante.
Mesmo que este seja o caminho mais "correto", parece estar impondo pureza por causa disso. Dependendo da linguagem de programação, passar esse Worldobjeto potencialmente muito grande para frente e para trás pode ser caro. Além disso, todas as funções podem precisar ter acesso a qualquer Worldobjeto. Por exemplo, uma sala pode estar acessível ou não, dependendo de uma alavanca acionada em outra sala, porque pode ser inundada, mas se o jogador carregar um colete salva-vidas, ele poderá entrar de qualquer maneira. Um monstro pode ser agressivo ou não, dependendo de o jogador ter matado seu primo em outra sala. Isso significa que a roomCanBeEnteredfunção precisa acessar World.player.invetorye World.rooms, describeMonsterprecisa acessar World.monsterse assim por diante (basicamente, você devepasse toda a carga). Isso realmente me parece exigir uma variável global, mesmo que seja apenas um bom estilo de programação, especialmente no FP.
Como resolveria este problema?