Je connais très peu à propos de la programmation fonctionnelle autre que l'idée de fonctions pures. Dans la discussion de Quakecon 2013 de John Carmack, il a mentionné l'une des questions souvent posées sur la programmation fonctionnelle liée aux Jeux: comment allumez-vous une arme à feu et endommagez un autre joueur si vous n'avez pas accès à l'état? (Paraphrasé) Dans mentionné quelque chose à propos d'un système d'événements, que je ne comprenais pas bien, car il me semble qu'un système d'événement aurait toujours besoin d'état? P>
Comment l'accomplirait-il dans une langue purement fonctionnelle? p>
3 Réponses :
Pour répéter l'une de mes citations préférées
... Prend dans l'état du monde et retourne un nouveau monde, restant donc pur. P> BlockQuote>
Cela parlait de propre, un cousin de haskell mais c'est toujours lié. Le gist, c'est que vous avez raison, vous avez besoin d'une sorte d'état, mais il n'est pas nécessaire d'être mutable. Considérez P>
killPlayer :: Game -> Event -> Action killPlayer (PlayerDamaged x amount) = if playerHealth g x <= amount then KillPlayer x else ReduceHealth x amount
Pour prendre en charge mon commentaire, voici un exemple adapté de http : //www.hakellforall.com/2013/05/programme-imperativé-utilisateur-ukell.html : lentilles permet d'écrire p> transformateur d'état (que vous devez utiliser quand même) permet de mélanger une autre monade (comme < code> io code>) à ... Prend dans l'état du monde et retourne un nouveau monde, donc
rester pur. p>
blockquote> comme un autre commentaire cité. p> p> état code>, mais il est essentiellement tout pur et fonctionne comme ceci: p>
L'état est juste un ensemble de valeurs dans l'environnement. Haskell vous permet de traiter votre environnement explicitement, afin que nous puissions appeler cela et les modifiert-leur p> types tels que si vous voulez faire plus que Juste em> Modifier un état Vous devez séquencer d'autres valeurs à côté de votre état env code>. Nous créons de nouveaux
env -> env code> sont appelés
Endo env code> dans lequel vous les appliquez de bout en bout pour faire de nombreuses modifications à l'état. P>
endo code>. Au lieu de ressembler à
env -> env code> Vous commencez à voir
env -> (env, a) code> où
a code> modélise votre autre flux de données et construction De là. Cette chose est connue comme la monade d'état car il existe des moyens très intelligents de manipuler ces deux flux d'informations ensemble assez facilement. P> P>
À Haskell, vous pouvez utiliser une monade d'état.
Avez-vous vu la myriade d'autres questions sur le FP et l'état? Certains d'entre eux sont même répertoriés à droite sous "liés". TL; DR - Il y a un état d'accord, mais pas d'état mutable. (L'état
code> MONAD mentionné ci-dessus n'est pas magique, il ne s'agit que de trente lignes de code de bibliothèque.)
Utilisation de "State Monad" (Googlable), oui. Fondamentalement, il ne s'agit que d'indiquer
State S A = S -> (A, S) code> avec
monad code> & CO INSTANCEMENTS. Pour un exemple de "jeu" pur, voir haskellforAl.com/2013/ 05 / ... .
Nous avons eu une rencontre récemment avec une discussion sur la programmation de jeux fonctionnelle. Voici le YouTube Vid: YouTube.com/watch?v=eyj5gonem4k . Voici le lien Meetup avec des diapositives, GitHub Link, etc.: Meetup.com/ Game-Technology-Brisbane / Événements / 139193912