Що означає операція, яку можна застосувати кілька разів і ніколи не змінювати стан поза початковою програмою?


38

Я намагаюся запам’ятати слово, думаю, що це пов’язано з теорією обчислень чи бази даних. Найближчий синонім, atomicале це не зовсім так. В основному це свого роду обчислення, які повинні давати той самий результат навіть при запуску кілька разів поспіль, тобто це не створює для себе побічних ефектів.

Я спеціально натрапив на це слово у відповіді на переповнення стека про команду chmod (або якусь іншу операцію, що стосується дозволу).

Сподіваємось, цього достатньо для продовження. Обмивання Вікіпедії не дуже допоможе.


5
Має сенс вказати, чи передаєте ви один і той же вхід для кожного виклику операції чи виконуєте кожну наступну операцію за результатами попереднього дзвінка.
maxim1000

3
@ maxim1000 Погоджено. Судячи з різноманітності відповідей, ніхто не впевнений, що означала ОП.
форд

Проблема тут полягає в тому, що питання в темі не є суто тим самим, як питання в тілі. Я відповів на тему, але, переглядаючи зараз, я впевнений, що це не те, чого хотів плакат. Редагує запитання, видаляє відповідь
пдр

Ви запитуєте про щось на зразок GET-запиту (де один і той же результат повертається кожен раз незалежно від того), або ви запитуєте про щось на зразок оператора призначення (що має ефект, але повторення тієї ж задачі нічого не змінює )?
Ізката

Відповіді:


91

Можливо, ви думаєте про " Ідентичне ".

Ідентифікація - це властивість певних операцій з математики та інформатики, що їх можна застосовувати багаторазово, не змінюючи результату поза початковим застосуванням.


16
В основному, fце безсильний IFF f(f(x)) == f(x)FORALL x.
Йорг W Міттаг

1
Цікаве обмеження опису - у розділі розмов на пов'язаній сторінці обговорюються кнопки ліфтів. Повинних бути 1000 поведінок, які можна охарактеризувати як "Idempotent", не пов'язані з Math або Comp Sci.
mattnz

З мого розуміння питання, це зовсім не те, що задає ОП, оскільки він не говорить про застосування алгоритму за результатами першої ітерації, але повторно застосовує його на одних і тих же вихідних даних. Щось більше, як якщо x = y, то F (x) = F (y)
Джобарк

2
@Joubarc так idempotent має трохи втрачає значення в обчисленні, то решта математики, отже, це правильно. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.

1
@Joubarc Це просто означає, що це функція. Операції, які на одному вході можуть діяти по-різному, не можна назвати функціями з математичної точки зору. Якщо в програмуванні їх називають функціями, то функції, які насправді завжди дають однаковий вихід на один і той же вхід, називаються pureфункціями ... Ну, начебто, вони теж не повинні мати взагалі ніякого побічного ефекту.
Пол Стеліан

12

Загальне слово - Idempotence, яке стосується як комп'ютерів, так і математики. Це не те саме, що регент, з яким його часто плутають. Імпотенція - це саме те, що ви описали. Відступник в основному переривається з можливістю підібрати саме там, де ви зупинилися.

Суто функціональні мови, такі як Haskell, побудовані навколо принципу максимально наближеного до Idempotent. Перші три букви абревіатури ACID в Теорії баз даних є Idempotence, застосовані до Баз даних.


10

Ви можете шукати чисту функцію .

Як визначено у посиланні, дві умови роблять функцію чистою:

  1. Функція завжди оцінює одне і те саме значення результату, задаючи однакові значення аргументів.
  2. Оцінка результату не спричиняє жодних семантично помітних побічних ефектів або результатів, таких як мутація змінних об'єктів або вихід на пристрої вводу / виводу.

4
Чистота виходить за рамки простої безсилля: чиста функція взагалі не може мати ніяких побічних ефектів, в той час як ідентична потужність може мати побічні ефекти до тих пір, поки вони не спричинять наступних запусків робити різні речі. Наприклад, функція, яка використовує локальні змінні змінні, не є чистою, але, ймовірно, ідентична. Ви навіть можете написати функцію, яка використовує глобальні змінні та все ще є ідентичною, доки ви переконайтеся, що вона охороняє ці глобалі, щоб зробити її повторною.
тдаммери

3
@tdammers Чистота і безсилля є повністю ортогональними: чиста функція не повинна бути безсильною і навпаки. Наприклад, f(x) := x + 1є чистою, але, безумовно, не безсилою.
Конрад Рудольф


0

Інша можливість - детермінована .

В інформатиці детермінований алгоритм - це алгоритм, який, даючи певний вхід, завжди буде давати однаковий вихід, при цьому машина, що лежить в основі, завжди проходить через ту саму послідовність станів.


1
це було тільки що видалено попередньою відповіддю; коментар, який кинув виклик цій ідеї, був такий: "Це неправильно. Наприклад, алгоритм, який поміняє два значення, ідеально детермінований, але запуск його двічі не дасть такого ж результату, як запуск одного разу".
гнат

2
Незрозуміло, чи відповідає це на початкове запитання, тому що оригінальне запитання не дуже добре сформульоване, але я відповів голосом за цю відповідь, оскільки цілком детермінікова цілком може бути те, що хтось шукав, коли вони закінчилися тут.
Річард Уайтхед

Якщо ви вимкнути вхідні значення до наступного запуску, як ви можете стверджувати, що ви надаєте рутині однакові точні значення аргументу ..?
Хайн Харальдсон Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.