Как называется операция, которая может применяться несколько раз и никогда не изменять состояние после первоначального применения?

38

Я пытаюсь вспомнить слово, я думаю , что оно связано с вычислительной теорией или теорией баз данных. Ближайший синоним есть, atomicно это не совсем так. По сути, это своего рода вычисления, которые должны давать один и тот же результат, даже если они запускаются несколько раз подряд, то есть не создают побочных эффектов для себя.

Я специально наткнулся на это слово в ответе переполнения стека о команде chmod (или какой-либо другой операции, связанной с разрешениями).

Надеюсь, этого будет достаточно. Прогулки по Википедии не сильно помогают.

Марк Фокс
источник
5
Имеет смысл указать, передаете ли вы один и тот же вход для каждого вызова операции или выполняете каждую следующую операцию с результатами предыдущего вызова.
maxim1000
3
@ maxim1000 Согласовано. Судя по разнообразию ответов, никто не уверен, что имел в виду ФП.
Форд
Проблема здесь в том, что вопрос в предмете не совсем совпадает с вопросом в теле. Я ответил на вопрос в теме, но, оглядываясь снова, я почти уверен, что это не то, что хотел плакат. Редактирует вопрос, удаляет ответ
pdr
Вы спрашиваете о чем-то вроде GET-запроса (где каждый раз возвращается один и тот же результат независимо от того, что), или вы спрашиваете о чем-то вроде оператора присваивания (который имеет эффект, но повторение того же присваивания ничего не меняет?) )?
Изката

Ответы:

91

Возможно, вы думаете о « идемпотенте ».

Идемпотентность является свойством некоторых операций в математике и информатике, что они могут применяться несколько раз без изменения результата за пределы первоначального применения.

Мэтью Кинг
источник
16
В принципе, fидемпотент IFF f(f(x)) == f(x)FORALL x.
Йорг Миттаг
1
Интересное ограничение описания - в разделе «Обсуждение» на связанной странице обсуждаются кнопки «Лифт». Должно быть 1000 поведений, которые можно описать как «идемпотентные», не относящиеся к математике или Comp Sci.
Mattnz
Из моего понимания вопроса это совсем не то, о чем спрашивает ОП, поскольку он не говорит о применении алгоритма к результатам первой итерации, а о повторном применении его к тем же исходным данным. Что-то более похожее, если x = y, то F (x) = F (y)
Joubarc
2
@Joubarc да, идемпотент имеет немного более слабое значение в вычислениях, чем остальные математики, поэтому это правильно. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.
1
@Joubarc Это просто означает, что это функция. Операции, которые на одном входе могут действовать по-разному, нельзя назвать функциями с математической точки зрения. Если в программировании они называются функциями, то функции, которые на самом деле всегда дают один и тот же вывод для одного и того же ввода, называются pureфункциями ... Ну, вроде бы, они также не должны иметь никакого побочного эффекта вообще.
Пол Стелиан
12

Общее слово - идемпотентность, которая относится как к компьютерам, так и к математике. Это не то же самое, что Reentrant, с которым его часто путают. Идемпотентность - это именно то, что вы описали. Реентрант в основном прерван способностью подобрать именно то, где вы остановились.

Чисто функциональные языки, такие как Haskell, построены вокруг принципа близости к идемпотенту, насколько это возможно. Первые три буквы ACID в теории баз данных - идемпотентность применительно к базам данных.

Мировой инженер
источник
10

Возможно, вы ищете чистую функцию .

Как определено в ссылке, два условия делают функцию чистой:

  1. Функция всегда оценивает одно и то же значение результата, учитывая одно и то же значение аргумента.
  2. Оценка результата не вызывает какого-либо семантически наблюдаемого побочного эффекта или вывода, такого как мутация изменяемых объектов или вывод на устройства ввода-вывода.
Себастьян Жюльен
источник
4
Чистота выходит за рамки простой идемпотентности: чистая функция вообще не может иметь побочных эффектов, в то время как идемпотентная может иметь побочные эффекты, если они не приводят к тому, что последующие прогоны делают разные вещи. Например, функция, которая использует локальные изменяемые переменные, не является чистой, но она, вероятно, идемпотентна. Вы могли бы даже написать функцию, которая использует глобальные переменные и все еще идемпотентна, если вы уверены, что она защищает эти глобальные переменные, чтобы сделать ее реентерабельной.
tdammers
3
@tdammers Чистота и идемпотентность полностью ортогональны: чистая функция не должна быть идемпотентной, и наоборот. Например, f(x) := x + 1чисто, но, конечно, не идемпотентно.
Конрад Рудольф
0

Другая возможность является детерминированной .

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

Грэм Борланд
источник
1
это было в только что удаленном предыдущем ответе; комментарий, который оспорил эту идею, звучал так: «Это неправильно. Например, алгоритм, который меняет два значения, является полностью детерминированным, но выполнение его дважды не даст тот же результат, что и запуск один раз».
комнат
2
Не ясно, отвечает ли это на исходный вопрос, потому что исходный вопрос не очень хорошо сформулирован, но я проголосовал за этот ответ, потому что слово «детерминированный» вполне может быть тем, которое кто-то искал, когда они заканчивали Вот.
Ричард Уайтхед
Если вы изменяете входные значения до следующего запуска, как вы можете утверждать, что вы предоставляете подпрограмме те же точные значения аргументов ..?
Хейн Харальдсон Берг