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


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.