Dans reactive-banana, j'ai un flux d'événements qui produit une série de nombres, dont certains se répètent plusieurs fois de suite (je ne suis pas concerné par tous les doublons, juste des doubles séquentiels). Comment puis-je modifier ce flux d'événements pour qu'il ne contienne que des doublons non séquentiels? J'ai essayé d'utiliser des changements pour le convertir en un comportement pensant que le comportement changerait seulement quand l'événement était un nouveau nombre mais au lieu que le comportement déclenche un événement de changement chaque fois qu'un nouvel événement d'entrée est reçu.Comment supprimer les événements répétitifs dans reactive-banana
Répondre
Notez que la fonction doit changes
ne être utilisé pour la liaison à des boîtes à outils de l'interface graphique et analogues, il ne doit pas être utilisé pour la programmation régulière avec les événements et les comportements.
Une fonction qui supresses les occurrences d'événements en double peut être exprimée en termes de mapAccum
et filterJust
combinators comme suit
skipEqual :: Eq a => Event t a -> Event t a
skipEqual = filterJust . fst . mapAccum Nothing . fmap f
where
f y (Just x) = if x == y then (Nothing,Just x) else (Just y,Just y)
f y Nothing = (Just y, Just y)
test = interpretModel skipEqual $ map (:[]) [1 :: Int,1,2,3,3,2]
Courir test
donne
*Main> test
[[1],[],[2],[3],[],[2]]
comme vous le souhaitez. En d'autres termes, vous pouvez simplement imaginer Event
comme une liste d'occurrences, puis appliquer vos combinateurs "liste" bien-aimés à cela.
Eh bien, changes
ne tourne pas quoi que ce soit dans un Behavior
; il vous permet d'observer juste les changements d'un Behavior
dans NetworkDescription
, de sorte que vous pouvez coller à des cadres externes. Le behaviour of changes
est décrit comme changes (stepper x e)
≡ return (calm e)
, donc le déclenchement d'un événement par stepper
et changes
n'aura aucun effet autre que calm
(qui supprime simplement toutes les occurrences simultanées mais la première).
Il est utile d'avoir un combinateur pour ignorer les occurrences qui ne changent pas la valeur, et je pense que d'autres frameworks FRP en ont un intégré. Mais vous pouvez écrire les vôtres facilement, comme le montre la réponse de Heinrich.
- 1. expression régulière pour supprimer les caractères répétitifs
- 2. Prolog, supprimer les résultats répétitifs dans la génération
- 3. Eléments répétitifs Richfaces
- 4. FullCalendar Supprimer les événements et les rejouer
- 5. Comment puis-je utiliser Html.Checkbox pour supprimer des groupes répétitifs dans ASP.NET MVC?
- 6. Regex pour reconnaître les caractères répétitifs
- 7. Supprimer tous les événements onclick d'un élément
- 8. Supprimer tous les événements tapés keydown
- 9. Comment pouvez-vous supprimer les événements de clic de # hrefs?
- 10. caractères non répétitifs regex
- 11. Comment les événements sont assignés dans .NET
- 12. cakephp ÉVITER les fichiers .ctp répétitifs
- 13. C# Comment faire pour supprimer et nettoyer tous les événements
- 14. Comment supprimer tous les événements d'un type d'un élément
- 15. Comment supprimer les événements du calendrier plus rapidement?
- 16. Numéros aléatoires non répétitifs
- 17. Prolog - supprimer d'une liste tous les éléments répétitifs (ne garder que des éléments uniques)
- 18. caractères non répétitifs d'une chaîne
- 19. Comment l'algorithme rsync identifie-t-il correctement les blocs répétitifs?
- 20. Java - événements dans les événements?
- 21. Produits Google/Projets répétitifs
- 22. Supprimer les événements de clavier natif dans Firefox (select tag)?
- 23. Un moyen d'éviter les codes répétitifs tkinter
- 24. Comment puis-je supprimer tous les événements du journal des événements d'application pour une seule source?
- 25. Champs Joomla répétitifs?
- 26. Codeigniter Modèles répétitifs
- 27. actionscript empêchant la redéfinition des variables dans les cadres répétitifs
- 28. Recherche de motifs/images répétitifs dans les images
- 29. Caractères répétitifs utilisant l'entrée d'envoi dans delphi
- 30. Supprimer les événements node.js, les auditeurs s'en vont aussi?
Oh, pourquoi ne pas que je pense de cette ?! J'ai supprimé la mise en œuvre moche de ma réponse en faveur de celui-ci. – ehird
Si vous ne deviez pas utiliser les changements, comment faites-vous quelque chose de significatif avec un comportement? – Orclev
@Orclev: Vous pouvez appliquer les comportements aux événements. Les opérateurs '<@>' et '<@' sont utilisés pour cela. En outre, vous pouvez utiliser la récurrence mutuelle entre les comportements et les événements. –