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


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
Не ясно, отвечает ли это на исходный вопрос, потому что исходный вопрос не очень хорошо сформулирован, но я проголосовал за этот ответ, потому что слово «детерминированный» вполне может быть тем, которое кто-то искал, когда они заканчивали Вот.
— Ричард Уайтхед

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