2011-01-26 11 views
40

Przeczytałem tłumaczenie Wikipedii na temat idempotencji. Wiem, że oznacza to, że wyjście funkcji jest określane przez jego wejście. Ale pamiętam, że słyszałem bardzo podobną koncepcję: czystą funkcję. Ja je Google, ale nie mogę znaleźć ich różnicy ...Czy idempotentne funkcje są takie same jak czyste funkcje?

Czy są one równoważne?

+1

Może to być przydatne dla kogoś, kto chce zrozumieć tę koncepcję: http://pedrorijo.com/blog/fp-concepts/ – pedrorijo91

Odpowiedz

41

Funkcja idempotent może powodować idempotentne efekty uboczne.

Czysta funkcja nie może.

Na przykład funkcja ustawiająca tekst pola tekstowego jest idempotentna (ponieważ wiele połączeń wyświetla ten sam tekst), ale nie jest czysta.
Podobnie, usunięcie rekordu według identyfikatora GUID (nie według liczby) jest idempotentne, ponieważ wiersz pozostaje usunięty po kolejnych połączeniach. (Dodatkowe połączenia zrobić nic)

+0

Przykład idempotentnego efektu ubocznego? Czy to coś w rodzaju drukowania na standardowe wyjście? –

+0

@Rafe: Zmienianie bazy danych. Na przykład zmiana pola w rekordzie. –

+1

@Rafe: Drukowanie na standardowe wyjście nie jest idempotentne, ponieważ każde wywołanie drukuje inną linię. – SLaks

10

czysty funkcja jest funkcją bez skutków ubocznych, gdzie wyjście jest wyłącznie określana przez wejście - czyli, nazywając f(x) da taki sam wynik bez względu na to, ile razy nazwać.

idempotent funkcja to taka, która może być stosowana wielokrotnie, nie zmieniając wynik - to znaczy, f(f(x)) jest taka sama jak f(x).

Funkcja może być czysta, idempotentna, obie lub żadna.

+7

Ale czysta funkcja musi być idempotentna. – SLaks

+0

Sądzę, że twoje wyjaśnienie jest "matematyczną" idempotentną funkcją. Różni się od pola obliczeniowego. –

+2

@ user590083: Nie, jego wyjaśnienie jest poprawne w polu komputerowym. Jednak zmieniony stan obliczeniowy jest częścią wyjścia, w kontekście odpowiedzi Anona. – Brian

3

Nie, idempotentna funkcja zmieni stan programu/obiektu/maszyny - i spowoduje tę zmianę tylko raz (pomimo wielokrotnych wywołań). Funkcja czysta nic nie zmienia i nadal dostarcza wynik (return) za każdym razem, gdy jest wywoływany.

4

Funkcjonalna czystość oznacza, że ​​nie ma żadnych skutków ubocznych. Z drugiej strony idempotencja oznacza, że ​​funkcja jest niezmienna w odniesieniu do wielu połączeń.

Każda czysta funkcja to efekt uboczny idempotentny, ponieważ czyste funkcje nigdy nie wywołują efektów ubocznych, nawet jeśli są wywoływane więcej niż jeden raz. Jednak wartość zwrotna idempotencja oznacza, że ​​f (f (x)) = f (x), które nie ma wpływu na czystość.

0

Czysta funkcja = Idempotent + Bez zmian zmiennych wejściowych.

+0

w programowaniu funkcjonalnym funkcja idempotentna spełnia f (f (fx)) = f (x). Funkcja czysta nie ma wpływu na stronę i zawsze zwraca tę samą wartość dla tych samych argumentów wejściowych. – lohfu

1

Dużym źródłem nieporozumień jest to, że w informatyce wydaje się, że istnieją różne definicje idempotencji w programowaniu imperatywnym i funkcjonalnym.

z Wikipedii (https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning)

w informatyce The idempotent termin ten jest używany dokładniej opisać operację, która będzie produkować takie same wyniki, jeśli wykonywana raz lub kilka razy. Może to mieć inne znaczenie w zależności od kontekstu, w którym jest stosowane. W przypadku metod lub wywołań podprogramów z efektami ubocznymi oznacza to na przykład, że zmodyfikowany stan pozostaje taki sam po pierwszym wywołaniu. W programowaniu funkcjonalnym funkcja idempotent to taka, która ma właściwość f (f (x)) = f (x) dla dowolnej wartości x.

Ponieważ czysta funkcja nie powoduje skutków ubocznych, jestem zdania, że ​​idempotencja nie ma nic wspólnego z czystością.

Powiązane problemy