คำสำหรับการดำเนินการที่สามารถนำมาใช้หลายครั้งและไม่เคยเปลี่ยนสถานะเกินกว่าแอปพลิเคชันเริ่มต้นคืออะไร


38

ฉันพยายามจำคำหนึ่งฉันคิดว่ามันเกี่ยวข้องกับทฤษฎีการคำนวณหรือฐานข้อมูล คำพ้องความหมายที่ใกล้เคียงที่สุดคือatomicแต่นั่นไม่ใช่สิ่งที่แน่นอน โดยทั่วไปมันเป็นการคำนวณที่ควรให้ผลลัพธ์เหมือนกันแม้ว่าจะทำงานหลาย ๆ ครั้งในแถวหมายความว่ามันจะไม่สร้างผลข้างเคียงให้กับตัวเอง

ฉันวิ่งข้ามคำนี้ในคำตอบ Stack Overflow เกี่ยวกับคำสั่ง chmod (หรือการดำเนินการอื่น ๆ ที่เกี่ยวข้องกับการอนุญาต)

หวังว่าจะเพียงพอต่อไป การพูดถึงวิกิพีเดียไม่ได้ช่วยอะไรมาก


5
เหมาะสมที่จะระบุว่าคุณส่งอินพุตเดียวกันไปยังทุกการโทรของการดำเนินการหรือเรียกใช้การดำเนินการต่อไปทุกครั้งสำหรับผลลัพธ์ของการโทรก่อนหน้า
maxim1000 1000

3
@ maxim1000 เห็นด้วย ตัดสินจากคำตอบที่หลากหลายไม่มีใครแน่ใจว่า OP หมายถึงอะไร
ฟอร์ด

ปัญหาที่นี่คือคำถามในหัวเรื่องนั้นไม่เหมือนกันกับคำถามในร่างกาย ฉันตอบคำถามในหัวข้อนี้ แต่ดูอีกครั้งตอนนี้ฉันค่อนข้างแน่ใจว่านั่นไม่ใช่สิ่งที่โปสเตอร์ต้องการ คำถามแก้ไขลบคำตอบ
สาธารณรัฐประชาธิปไตยประชาชนลาว

คุณกำลังถามเกี่ยวกับคำขอ GET (ซึ่งผลลัพธ์เดียวกันนั้นส่งคืนทุกครั้งไม่ว่าจะเกิดอะไรขึ้น) หรือคุณกำลังถามบางอย่างเช่นผู้ดำเนินการที่ได้รับมอบหมาย (ซึ่งมีผลกระทบ แต่การทำซ้ำการมอบหมายเดียวกันจะไม่เปลี่ยนแปลงอะไรเลย) )?
Izkata

คำตอบ:


90

คุณอาจคิดถึง " Idempotent "

Idempotence เป็นคุณสมบัติของการดำเนินการบางอย่างในวิชาคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์ซึ่งสามารถนำไปใช้ได้หลายครั้งโดยไม่ต้องเปลี่ยนผลลัพธ์นอกเหนือจากการสมัครครั้งแรก


16
โดยทั่วไปfเป็น idempotent IFF forallf(f(x)) == f(x) x
Jörg W Mittag

1
ข้อ จำกัด ที่น่าสนใจของคำอธิบาย - ส่วนการพูดคุยของหน้าที่เชื่อมโยงกล่าวถึงปุ่มลิฟท์ต้องมีพฤติกรรม 1000 รายการที่สามารถอธิบายได้ว่า "Idempotent" ไม่เกี่ยวข้องกับคณิตศาสตร์หรือคอมพ์ Sci
mattnz

จากความเข้าใจในคำถามของฉันนั่นไม่ใช่สิ่งที่ OP ถามเพราะเขาไม่ได้พูดถึงการใช้อัลกอริทึมกับผลลัพธ์ของการทำซ้ำครั้งแรก แต่นำมาใช้ซ้ำกับแหล่งข้อมูลเดียวกัน มีบางอย่างที่มากกว่านี้ถ้า x = y ดังนั้น F (x) = F (y)
Joubarc

2
@Joubarc ใช่ idempotent มีความหมายที่คลาดเคลื่อนเล็กน้อยในการคำนวณแล้วส่วนที่เหลือของคณิตศาสตร์จึงถูกต้อง en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk

ฉันได้อ่านหน้านี้แล้วและฉันก็ไม่มั่นใจในเวลานั้น แต่ความจริงแล้วมันไม่ใช่แนวคิดของ idempotence ที่ฉันมีปัญหา ค่อนข้างมันเป็นคำถามที่เกี่ยวกับมันหรือไม่ แต่ตอนนี้ฉันอ่านมันอีกครั้งฉันยอมรับว่าฉันผิด (โดยเฉพาะตัวอย่าง chmod ซึ่งเป็นกรณีที่ดี)
Joubarc

12

คำทั่วไปคือIdempotenceซึ่งใช้กับคอมพิวเตอร์และคณิตศาสตร์ มันไม่เหมือนกับReentrantซึ่งมักจะสับสนกับ Idempotence เป็นสิ่งที่คุณอธิบายอย่างชัดเจน Reentrant สามารถขัดจังหวะโดยอัตโนมัติด้วยความสามารถในการรับสิ่งที่คุณทิ้งไว้

ภาษาที่ใช้งานได้อย่างหมดจดเช่น Haskell ถูกสร้างขึ้นโดยยึดหลักการของการใกล้เคียงกับ Idempotent มากที่สุดเท่าที่จะเป็นไปได้ ตัวอักษรสามตัวแรกของACID แบบย่อในทฤษฎีฐานข้อมูลคือ Idempotence ที่ใช้กับฐานข้อมูล


10

คุณอาจจะมองหาฟังก์ชั่นที่บริสุทธิ์

ตามที่กำหนดไว้ในลิงค์เงื่อนไขสองประการทำให้ฟังก์ชั่นเป็นจริง:

  1. ฟังก์ชันจะประเมินค่าผลลัพธ์เดียวกันเสมอซึ่งให้ค่าอาร์กิวเมนต์ที่เหมือนกันเสมอ
  2. การประเมินผลลัพธ์ไม่ได้ทำให้เกิดผลข้างเคียงหรือเอาท์พุทที่สังเกตเห็นได้ทางความหมายเช่นการกลายพันธุ์ของวัตถุที่ไม่แน่นอนหรือเอาท์พุทไปยังอุปกรณ์ I / O

4
ความบริสุทธิ์เหนือกว่า idempotence ง่าย ๆ : ฟังก์ชั่นแท้ไม่สามารถมีผลข้างเคียงใด ๆ ได้ในขณะที่ idempotent สามารถมีผลข้างเคียงได้ตราบใดที่พวกเขาไม่ทำให้เกิดการเรียกใช้ในการทำสิ่งต่าง ๆ ตัวอย่างเช่นฟังก์ชั่นที่ใช้ตัวแปรที่เปลี่ยนแปลงได้ในท้องถิ่นนั้นไม่ได้บริสุทธิ์ แต่อาจเป็น idempotent คุณสามารถเขียนฟังก์ชันที่ใช้ตัวแปรทั่วโลกและยังคงเป็น idempotent ตราบใดที่คุณตรวจสอบให้แน่ใจว่ามันปกป้อง galals เหล่านั้นเพื่อทำให้ reentrant
tdammers

3
@tammers ความบริสุทธิ์และ idempotence เป็นฉากที่สมบูรณ์: ฟังก์ชั่นที่บริสุทธิ์ไม่จำเป็นต้องเป็น idempotent และในทางกลับกัน ตัวอย่างเช่นf(x) := x + 1มีความบริสุทธิ์ แต่แน่นอนไม่ idempotent
Konrad Rudolph


0

ความเป็นไปได้อีกอย่างก็คือกำหนดไว้

ในวิทยาการคอมพิวเตอร์อัลกอริธึมที่กำหนดขึ้นเป็นอัลกอริธึมที่ได้รับข้อมูลเฉพาะจะผลิตผลลัพธ์เดียวกันเสมอโดยเครื่องจักรพื้นฐานมักจะผ่านลำดับเดียวกันของรัฐเสมอ


1
นี่เป็นเพียงการลบคำตอบก่อนหน้านี้; ความคิดเห็นที่ท้าทายแนวคิดนี้คือ: "ไม่ถูกต้องตัวอย่างเช่นอัลกอริทึมที่สลับค่าสองค่านั้นกำหนดได้อย่างสมบูรณ์แบบ แต่การรันสองครั้งจะไม่ให้ผลลัพธ์ที่เหมือนกันกับการรันครั้งเดียว"
ริ้น

2
ไม่ชัดเจนหรือไม่ว่าสิ่งนี้จะตอบคำถามเดิมหรือไม่เพราะคำถามเดิมไม่ได้เป็นประโยคที่ดีมาก แต่ฉันได้รับการโหวตคำตอบนี้เพราะคำที่กำหนดขึ้นอาจเป็นคำที่ใครบางคนกำลังค้นหาเมื่อสิ้นสุด ที่นี่
Richard Whitehead

หากคุณเปลี่ยนค่าอินพุตก่อนที่จะรันครั้งถัดไปคุณจะอ้างได้อย่างไรว่าคุณได้จัดเตรียมรูทีนด้วยค่าอาร์กิวเมนต์ที่แน่นอนเหมือนกัน .. ?
Hein Haraldson Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.