Birden çok kez uygulanabilen ve ilk uygulamanın ötesinde hiçbir zaman durum değiştirmeyen bir işlemin sözcüğü nedir?


38

Bir kelimeyi hatırlamaya çalışıyorum, bunun hesaplama veya veritabanı teorisi ile ilgili olduğunu düşünüyorum . En yakın eşanlamlı atomicama tam olarak bu değil. Temel olarak, art arda defalarca çalıştırılsa bile aynı sonucu vermesi gereken bir tür hesaplama, yani kendisi için yan etkiler yaratmaz.

Özellikle bu kelime ile chmod komutu (veya başka bir izin işlemiyle ilgili işlem) hakkında bir Yığın Taşması cevabında rastladım.

Umarım devam etmesi yeterlidir. Wikipedia'da dolaşmak pek yardımcı olmuyor.


5
Her giriş için aynı girişi geçip geçmediğinizi veya bir sonraki işlemi yaptığınızda önceki işlemi çalıştırıp çalıştırmadığınızı belirtmek mantıklıdır.
maxim1000

3
@ maxim1000 Anlaşıldı. Cevapların çeşitliliğine bakıldığında, hiç kimse OP'nin ne anlama geldiğinden emin değil.
ford

Buradaki sorun, konudaki sorunun kesinlikle vücuttaki soru ile aynı olmamasıdır. Konudaki soruyu cevapladım ama şimdi tekrar bakarken, posterin istediği şeyin bu olmadığından eminim. Soruyu
düzenler

Bir GET isteği gibi bir şey mi soruyorsunuz (ne olursa olsun her seferinde aynı sonucun iade edildiğini) veya atama operatörü gibi bir şey mi soruyorsunuz (ki bunun bir etkisi var, ancak aynı ödevi tekrarlamak hiçbir şeyi değiştirmiyor) )?
Izkata

Yanıtlar:


91

" Idempotent " ı düşünüyor olabilirsiniz .

Temel düşünce, matematik ve bilgisayar bilimlerindeki bazı işlemlerin, ilk uygulama dışındaki sonucu değiştirmeden birden fazla kez uygulanabilmelerinin özelliğidir.


16
Temel olarak, idmpotent fIFF f(f(x)) == f(x)FORALL x.
Jörg W Mittag

1
Açıklamanın ilginç bir şekilde sınırlandırılması - Bağlantılı sayfanın konuşma bölümü, Asansör düğmelerini tartışmaktadır. Math veya Comp Sci ile ilgili olmayan "Idempotent" olarak tanımlanabilecek 1000 davranış vardır.
mattnz

Soruyu anladığım kadarıyla, OP'nin sorduğu şey, algoritmayı ilk yinelemenin sonuçlarına uygulamaktan bahsetmediği gibi, aynı kaynak veri üzerinde tekrar uygulamak. Eğer x = y, sonra F (x) = F (y)
Joubarc

2
@Joubarc yes idempotent, hesaplamanın ardından matematik geri kalanında biraz daha gevşek bir anlama sahiptir, bu nedenle doğrudur. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.

1
@ Joubarc Bu sadece bir fonksiyon anlamına gelir. Aynı girdi üzerinde farklı hareket edebilen işlemlere matematiksel açıdan işlevler denemez. Programlamada bunlara işlev denirse, aslında aynı girdi için her zaman aynı çıktıyı veren pureişlevler işlevler olarak adlandırılır ... Eh, biraz, ayrıca herhangi bir yan etkiye sahip olmaları gerekmez.
Paul Stelian

12

Genel kelime, hem bilgisayar hem de matematik için geçerli olan İfadesidir . Sık sık karıştığı Reentrant ile aynı şey değil . İfadesizlik, tam olarak tanımladığınız şeydir, Reentrant, tam olarak bıraktığınız yeri alma kabiliyeti ile temelde kesilebilir.

Tamamen Haskell gibi İşlevsel diller, Idempotent'e mümkün olduğunca yakın olma ilkesi üzerine kuruludur. Veri Tabanı Teorisindeki ACID kısaltmasının ilk üç harfi Veritabanlarına uygulanan Doğruluktur.


10

Saf bir işlev arıyor olabilirsiniz .

Bağlantıda tanımlandığı gibi, iki koşul bir işlevi saf kılar:

  1. İşlev her zaman aynı argüman değerleri verilen aynı sonuç değerini değerlendirir.
  2. Sonucun değerlendirilmesi, değişken nesnelerin mutasyonu veya I / O cihazlarına çıkışı gibi herhangi bir semantik olarak gözlemlenebilir yan etkiye veya çıktılığa neden olmaz.

4
Saflık basit bir bağımsızlığın ötesine geçer: saf bir fonksiyonun hiçbir yan etkisi olamaz, bir bağımsız olan ise sonraki çalışmaların farklı şeyler yapmasına neden olmadıkça yan etkilere sahip olabilir. Örneğin, yerel değişken değişkenleri kullanan bir işlev saf değildir, ancak muhtemelen önemsizdir. Küresel değişkenleri kullanan ve hala önemsiz olan bir işlevi bile yazabilirsiniz .
tdammers

3
Tdammers Saflık ve bağımsızlık tamamen ortogonaldir: saf bir fonksiyon idempotent olmak zorunda değildir ve bunun tersi de geçerlidir. Mesela, f(x) := x + 1saf ama kesinlikle iddiasız değil.
Konrad Rudolph


0

Başka bir olasılık deterministic .

Bilgisayar bilimlerinde, deterministik bir algoritma, belirli bir girdi verildiğinde, her zaman aynı çıktıyı üretecek bir algoritmadır, temeldeki makine her zaman aynı durum dizisinden geçer.


1
bu, daha önce yanıtlanmış ve silinmiştir; Bu fikre itiraz eden yorum yapıldı: "Bu yanlış. Örneğin, iki değeri değiştiren algoritma tamamen belirleyicidir, ancak iki kez çalıştırılması, bir kez çalıştırılmasıyla aynı sonucu vermez."
gnat

2
Bunun asıl soruya cevap verip vermediği belli değil, çünkü orijinal soru çok iyi ifade edilmemiş, ancak deterministik kelimesi birinin ne zaman aradığı sorgusu olabileceğinden, bu cevabı arttırdım. İşte.
Richard Whitehead

Bir sonraki çalıştırmadan önce giriş değerlerini değiştirirseniz, rutine aynı argüman değerlerini sağladığını nasıl iddia edebilirsiniz ..?
Hein Haraldson Berg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.