Jakie jest słowo na operację, którą można zastosować wiele razy i nigdy nie zmieniać stanu poza początkową aplikację?

38

Próbuję zapamiętać słowo, myślę, że jest związane z teorią obliczeń lub baz danych. Najbliższy synonim to atomicjednak nie to. Zasadniczo jest to rodzaj obliczeń, które powinny dawać taki sam wynik, nawet jeśli są uruchamiane wiele razy z rzędu, co oznacza, że ​​nie wywołuje skutków ubocznych dla siebie.

W szczególności natknąłem się na to słowo w odpowiedzi Przepełnienie stosu dotyczące polecenia chmod (lub innej operacji związanej z uprawnieniami).

Mam nadzieję, że to wystarczy. Grzebanie w Wikipedii niewiele pomaga.

Mark Fox
źródło
5
Sensowne jest określenie, czy przekazujesz to samo wejście do każdego wywołania operacji, czy uruchamiasz każdą następną operację na wynikach poprzedniego wywołania.
maxim1000
3
@ maxim1000 Uzgodniony. Sądząc po różnorodności odpowiedzi, nikt nie jest pewien, co miał na myśli PO.
Ford
Problem polega na tym, że pytanie w temacie nie jest dokładnie takie samo jak pytanie w ciele. Odpowiedziałem na ten temat, ale patrząc ponownie, jestem całkiem pewien, że nie tego chciał plakat. Edytuje pytanie, usuwa odpowiedź
pdr
Pytasz o coś takiego jak żądanie GET (w którym za każdym razem zwracany jest ten sam wynik), czy pytasz o coś takiego jak operator przypisania (który ma efekt, ale powtórzenie tego samego przypisania niczego nie zmienia )?
Izkata,

Odpowiedzi:

91

Być może myślisz o „ Idempotent ”.

Idempotencja to właściwość niektórych operacji w matematyce i informatyce, którą można zastosować wiele razy bez zmiany wyniku poza początkową.

Matthew King
źródło
16
Zasadniczo fjest idempotentny IFF f(f(x)) == f(x)FORALL x.
Jörg W Mittag,
1
Interesujące ograniczenie opisu - w sekcji dyskusji na połączonej stronie omawia się przyciski windy. Musi istnieć 1000 zachowań, które można opisać jako „idempotentne” niezwiązane z matematyką ani comp sci.
mattnz
Z mojego zrozumienia tego pytania wcale nie tego wymaga OP, ponieważ nie mówi on o zastosowaniu algorytmu do wyników pierwszej iteracji, ale o ponownym zastosowaniu go do tych samych danych źródłowych. Coś więcej jak jeśli x = y, to F (x) = F (y)
Joubarc
2
@Joubarc tak idempotent ma nieco luźniejsze znaczenie w obliczeniach niż reszta matematyki, dlatego jest poprawna. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.
1
@Joubarc Oznacza to, że jest to funkcja. Operacje, które na tym samym wejściu mogą działać inaczej, nie mogą być nazywane funkcjami z matematycznego punktu widzenia. Jeśli w programowaniu są one nazywane funkcjami, funkcje, które w rzeczywistości zawsze dają to samo wyjście dla tego samego wejścia, nazywane są purefunkcjami ... Cóż, w pewnym sensie, one również nie muszą mieć żadnych skutków ubocznych.
Paul Stelian
12

Ogólnym słowem jest idempotencja, która dotyczy zarówno komputerów, jak i matematyki. To nie jest to samo co Reentrant, z którym często się myli. Idempotencja jest dokładnie tym, co opisałeś, Reentrant jest zasadniczo przerywany z możliwością odebrania dokładnie tam, gdzie przerwałeś.

Czysto funkcjonalne języki, takie jak Haskell, są zbudowane wokół zasady bycia jak najbliżej Idempotent. Pierwsze trzy litery akronimu ACID w teorii baz danych to Idempotencja w odniesieniu do baz danych.

Inżynier świata
źródło
10

Być może szukasz czystej funkcji .

Jak zdefiniowano w łączu, dwa warunki czynią funkcję czystą:

  1. Funkcja zawsze ocenia tę samą wartość wyniku, biorąc pod uwagę te same wartości argumentu.
  2. Ocena wyniku nie powoduje żadnych semantycznie obserwowalnych skutków ubocznych lub wyników, takich jak mutacja obiektów podlegających mutacji lub wyjście do urządzeń I / O.
Sebastien Julien
źródło
4
Czystość wykracza poza prostą idempotencję: czysta funkcja w ogóle nie może mieć żadnych skutków ubocznych, podczas gdy idempotencjał może mieć skutki uboczne, o ile nie powodują one, że kolejne przebiegi robią różne rzeczy. Na przykład funkcja wykorzystująca lokalne zmienne zmienne nie jest czysta, ale prawdopodobnie jest idempotentna. Możesz nawet napisać funkcję, która używa zmiennych globalnych i nadal jest idempotentna, o ile upewnisz się, że chroni ona te globale, aby ponownie wprowadzić dane.
tdammers
3
@tdammers Czystość i idempotencja są całkowicie ortogonalne: czysta funkcja nie musi być idempotentna i odwrotnie. Na przykład f(x) := x + 1jest czysty, ale na pewno nie idempotentny.
Konrad Rudolph
0

Inna możliwość jest deterministyczna .

W informatyce algorytm deterministyczny jest algorytmem, który przy określonym wejściu zawsze będzie wytwarzał ten sam wynik, a maszyna leżąca u jego podstaw zawsze przechodzi przez tę samą sekwencję stanów.

Graham Borland
źródło
1
zostało to właśnie usunięte wcześniejszą odpowiedzią; komentarz, który zakwestionował ten pomysł, brzmiał: „To źle. Na przykład algorytm, który zamienia dwie wartości, jest całkowicie deterministyczny, ale dwukrotne uruchomienie go nie da takiego samego wyniku, jak jednokrotne uruchomienie”.
komar
2
Nie jest jasne, czy to odpowiada na pierwotne pytanie, ponieważ pierwotne pytanie nie jest zbyt dobrze sformułowane, ale głosowałem za tą odpowiedzią, ponieważ słowo deterministyczne może być tym, którego ktoś szukał, kiedy skończył tutaj.
Richard Whitehead
Jeśli zmutujesz wartości wejściowe przed następnym uruchomieniem, jak możesz twierdzić, że udostępniasz procedurę z tymi samymi dokładnymi wartościami argumentów ..?
Hein Haraldson Berg