Quel est le mot pour une opération qui peut être appliquée plusieurs fois et ne jamais changer d'état au-delà de l'application initiale?


38

J'essaie de me souvenir d'un mot, je pense qu'il est lié à la théorie informatique ou à la base de données. Le synonyme le plus proche est atomicmais ce n'est pas exactement ça. C'est en gros une sorte de calcul qui devrait produire le même résultat même s'il est exécuté plusieurs fois de suite, ce qui signifie qu'il ne crée pas d'effets secondaires pour lui-même.

J'ai spécifiquement rencontré ce mot dans une réponse Stack Overflow à propos d'une commande chmod (ou d'une autre opération liée à une autorisation).

J'espère que ça suffit pour continuer. Il n'est pas très utile de fouiller dans Wikipedia.


5
Il est logique de spécifier si vous transmettez la même entrée à chaque appel d'opération ou exécutez chaque opération suivante sur les résultats de l'appel précédent.
maxim1000

3
@ maxim1000 D'accord. À en juger par la variété des réponses, personne ne sait vraiment ce que le PO voulait dire.
Ford

Le problème ici est que la question dans le sujet n'est pas strictement la même que la question dans le corps. J'ai répondu à celle sur le sujet mais, en cherchant encore une fois, je suis à peu près sûr que ce n'est pas ce que l'affiche voulait. Modifie la question, supprime la réponse
pdr

Demandez-vous quelque chose comme une requête GET (où le même résultat est renvoyé à tout moment), ou demandez-vous quelque chose comme l'opérateur d'affectation (qui a un effet, mais répéter la même affectation ne change rien )?
Izkata

Réponses:


91

Vous pensez peut-être à " Idempotent ".

L'idempotence est la propriété de certaines opérations en mathématiques et en informatique, selon laquelle elles peuvent être appliquées plusieurs fois sans modifier le résultat au-delà de l'application initiale.


16
Fondamentalement, fest idempotent IFF f(f(x)) == f(x)FORALL x.
Jörg W Mittag

1
Limitation intéressante de la description - La section conversation de la page liée traite des boutons de l'ascenseur. Il doit y avoir des milliers de comportements pouvant être décrits comme "idempotents" sans lien avec Math ou Comp Sci.
mattnz

D'après ce que je comprends de la question, ce n'est pas du tout ce que le PO demande, car il ne parle pas d'appliquer l'algorithme aux résultats de la première itération, mais de le réappliquer sur les mêmes données source. Quelque chose de plus semblable à si x = y, alors F (x) = F (y)
Joubarc

2
@Joubarc yes idempotent a une signification légèrement plus souple dans l'informatique que dans le reste des mathématiques, d'où son exactitude. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.

1
@Joubarc Cela signifie simplement que c'est une fonction. Les opérations qui peuvent agir différemment sur la même entrée ne peuvent pas être appelées fonctions d'un point de vue mathématique. Si, dans la programmation, elles sont appelées fonctions, les fonctions qui donnent en fait toujours la même sortie pour la même entrée sont appelées purefonctions ... Eh bien, un peu, elles ne doivent également avoir aucun effet secondaire.
Paul Stelian,

12

Le mot général est Idempotence qui s’applique à la fois aux ordinateurs et aux mathématiques. Ce n'est pas la même chose que Reentrant avec laquelle il est souvent confondu. L'idempotence est précisément ce que vous avez décrit. Réentrant est fondamentalement interruptible et permet de reprendre exactement où vous vous êtes arrêté.

Les langages purement fonctionnels comme Haskell sont construits autour du principe d’être aussi proche que possible d’Idempotent. Les trois premières lettres de l'acronyme ACID dans Database Theory sont Idempotence telles qu'elles sont appliquées aux bases de données.


10

Vous pourriez être à la recherche d'une fonction pure .

Comme défini dans le lien, deux conditions rendent une fonction pure:

  1. La fonction évalue toujours la même valeur de résultat avec les mêmes valeurs d'argument.
  2. L'évaluation du résultat ne provoque pas d'effet secondaire ou de sortie observable sémantiquement, tel que la mutation d'objets mutables ou la sortie sur des périphériques d'E / S.

4
La pureté va au-delà de la simple idempotence: une fonction pure ne peut avoir aucun effet secondaire, tandis qu'une idempotente peut avoir des effets secondaires tant qu'elle ne force pas les cycles ultérieurs à faire des choses différentes. Par exemple, une fonction qui utilise des variables locales mutables n'est pas pure, mais elle est probablement idempotente. Vous pouvez même écrire une fonction qui utilise des variables globales et qui est toujours idempotente, tant que vous vous assurez qu'elle garde ces globales pour la rendre réentrante.
tdammers

3
@tdammers La pureté et l'idempotence sont complètement orthogonaux: une fonction pure ne doit pas nécessairement être idempotente et vice versa. Par exemple, f(x) := x + 1est pur mais certainement pas idempotent.
Konrad Rudolph


0

Une autre possibilité est déterministe .

En informatique, un algorithme déterministe est un algorithme qui, avec une entrée particulière, produira toujours la même sortie, la machine sous-jacente passant toujours par la même séquence d'états.


1
cela a été simplement supprimé dans la réponse précédente; Le commentaire qui a remis en question cette idée était: "C'est faux. Par exemple, l'algorithme qui permute deux valeurs est parfaitement déterministe, mais le faire deux fois ne produira pas le même résultat que si on l'exécutait une fois."
Gnat

2
Il n'est pas clair si cela répond ou non à la question initiale, car la question initiale n'est pas très bien formulée, mais j'ai voté favorablement cette réponse, car le mot «déterministe» pourrait bien être celui que quelqu'un recherchait quand ils se sont retrouvés ici.
Richard Whitehead

Si vous modifiez les valeurs d'entrée avant la prochaine exécution, comment pouvez-vous prétendre que vous fournissez à la routine les mêmes valeurs d'argument exactes?
Hein Haraldson Berg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.