Esta es principalmente una pregunta teórica sobre FP, pero tomaré aventuras de texto (como Zork de la vieja escuela) para ilustrar mi punto. Me gustaría conocer sus opiniones sobre cómo modelaría una simulación con estado con FP.
Las aventuras de texto realmente parecen requerir POO. Por ejemplo, todas las "salas" son instancias de una Roomclase, puede tener una Itemclase básica e interfaces como Item<Pickable>cosas que puede transportar, etc.
El modelado mundial en FP funciona de manera diferente, especialmente si quieres imponer la inmutabilidad en un mundo que debe mutar a medida que avanza el juego (los objetos se mueven, los enemigos son derrotados, la puntuación aumenta, el jugador cambia su ubicación). Me imagino un solo gran objeto Worldque lo tiene todo: cuáles son las habitaciones que puedes explorar, cómo están vinculadas, qué lleva el jugador, qué palancas se han activado.
Creo que un enfoque puro sería básicamente pasar este gran objeto a cualquier función y hacer que lo devuelva (posiblemente modificado). Por ejemplo, tengo una moveToRoomfunción que obtiene Worldy devuelve con World.player.locationcambiado a la nueva sala, World.rooms[new_room].visited = Truey así sucesivamente.
Incluso si esta es la forma más "correcta", parece estar haciendo cumplir la pureza por el bien de la misma. Dependiendo del lenguaje de programación, pasar este Worldobjeto potencialmente muy grande de un lado a otro puede ser costoso. Además, cada función puede necesitar tener acceso a cualquier Worldobjeto. Por ejemplo, una habitación puede ser accesible o no dependiendo de una palanca activada en otra habitación porque puede estar inundada, pero si el jugador lleva un chaleco salvavidas, puede ingresar de todos modos. Un monstruo puede ser agresivo o no, dependiendo de si el jugador ha matado a su primo en otra habitación. Esto significa que la roomCanBeEnteredfunción necesita el acceso World.player.invetoryy World.rooms, describeMonsternecesita acceder World.monstersy así sucesivamente (básicamente, que debepasar toda la carga). Esto realmente me parece que requiere una variable global, incluso si este es un buen estilo de programación, especialmente en FP.
Como resolverías este problema?