อ่าน 2 นาที
การอ้างอิงแบบวงกลม
การ อ้างอิงแบบวงกลม (หรือ วงจรการอ้างอิง [ 1 ] ) คือชุดของ การอ้างอิง ที่วัตถุสุดท้ายอ้างอิงถึงวัตถุแรก ส่งผลให้เกิดวงปิด
การอ้างอิงแบบวงกลม
การอ้างอิงแบบวงกลม (หรือวงจรการอ้างอิง[ 1 ] ) คือชุดของการอ้างอิงที่วัตถุสุดท้ายอ้างอิงถึงวัตถุแรก ส่งผลให้เกิดวงปิด

ตัวอย่างง่ายๆ
คนแปลกหน้าถามคนท้องถิ่นว่าห้องสมุดประจำเมืองอยู่ที่ไหน "อยู่ตรงหน้าไปรษณีย์เลย" คนท้องถิ่นตอบ คนแปลกหน้าพยักหน้า แล้วถามต่อว่า "แล้วไปรษณีย์อยู่ไหนล่ะ?"
"อ๋อ ง่ายมากเลย" ชาวบ้านตอบ "มันอยู่ด้านหลังห้องสมุดนี่เอง!"
ในภาษา
การอ้างอิงแบบวนซ้ำไม่ควรสับสนกับความผิดพลาดทางตรรกะของการให้เหตุผลแบบวนซ้ำแม้ว่าการอ้างอิงแบบวนซ้ำมักจะไม่เป็นประโยชน์และไม่เปิดเผยข้อมูลใดๆ เช่น รายการสองรายการในดัชนีหนังสือที่อ้างอิงถึงกันและกัน แต่ก็ไม่ได้หมายความว่าการอ้างอิงแบบวนซ้ำจะไม่มีประโยชน์เสมอไป ตัวอย่างเช่น พจนานุกรมจะต้องเป็นการอ้างอิงแบบวนซ้ำในที่สุดเสมอ เนื่องจากคำทุกคำในพจนานุกรมถูกนิยามโดยใช้คำอื่นๆ แต่พจนานุกรมก็ยังคงเป็นแหล่งอ้างอิงที่มีประโยชน์ ประโยคที่มีการอ้างอิงแบบวนซ้ำยังคงมีความหมายได้:
- พี่ชายของเธอให้ลูกแมวตัวหนึ่งแก่เธอ และน้องสาวของเขาก็ขอบคุณเขาสำหรับลูกแมวตัวนั้น
เป็นวงกลม แต่ก็ไม่ได้ไร้ความหมาย อันที่จริง อาจกล่าวได้ว่าการอ้างอิงตนเองเป็นผลสืบเนื่องที่จำเป็นของกฎแห่งการไม่ขัดแย้ง ของอริสโตเติล ซึ่ง เป็นสัจพจน์ทางปรัชญาพื้นฐานในมุมมองนี้ หากปราศจากการอ้างอิงตนเองตรรกะและคณิตศาสตร์ก็เป็นไปไม่ได้ หรืออย่างน้อยก็ไม่มีประโยชน์[ 2 ] [ 3 ]
ในการเขียนโปรแกรมคอมพิวเตอร์
การอ้างอิงแบบวนซ้ำสามารถเกิดขึ้นได้ในการเขียนโปรแกรมคอมพิวเตอร์เมื่อโค้ดส่วนหนึ่งต้องการผลลัพธ์จากอีกส่วนหนึ่ง แต่โค้ดส่วนนั้นก็ต้องการผลลัพธ์จากส่วนแรกเช่นกัน ตัวอย่างเช่น ฟังก์ชัน posn และ plus1 ในโปรแกรม Python ต่อไปนี้ประกอบกันเป็นการอ้างอิงแบบวนซ้ำ:
def posn ( k : int ) -> int : if k < 0 : return plus1 ( k ) return kdef plus1 ( n : int ) -> int : return posn ( n + 1 )การอ้างอิงแบบวนซ้ำ เช่นตัวอย่างข้างต้น อาจให้ผลลัพธ์ที่ถูกต้องหากมีเงื่อนไขการสิ้นสุด หากไม่มีเงื่อนไขการสิ้นสุด การอ้างอิงแบบวนซ้ำจะนำไปสู่สภาวะที่เรียกว่าlivelockหรือลูปอนันต์ซึ่งหมายความว่าในทางทฤษฎีแล้วมันอาจทำงานไปเรื่อยๆ อย่าง ไม่มีที่สิ้นสุด
def posn ( k : int ) -> int : return plus1 ( k )def plus1 ( n : int ) -> int : return posn ( n + 1 )ในมาตรฐาน ISO ข้อจำกัดความสมบูรณ์แบบวงกลมของ SQL ได้รับการสนับสนุนโดยปริยายภายในตารางเดียว สำหรับข้อจำกัดแบบวงกลมระหว่างหลายตาราง (เช่น คีย์ต่างประเทศ) สามารถทำได้โดยการกำหนดข้อจำกัดเป็นแบบเลื่อนได้ (ดูCREATE TABLEสำหรับ PostgreSQL และตัวอย่างข้อจำกัด DEFERRABLEสำหรับ Oracle) ในกรณีนั้น ข้อจำกัดจะถูกตรวจสอบเมื่อสิ้นสุดธุรกรรม ไม่ใช่ในขณะที่คำสั่ง DML ถูกดำเนินการ เพื่ออัปเดตการอ้างอิงแบบวงกลม สามารถออกคำสั่งสองคำสั่งในธุรกรรมเดียวซึ่งจะทำให้การอ้างอิงทั้งสองเป็นไปตามเงื่อนไขเมื่อธุรกรรมได้รับการยืนยันแล้ว
การอ้างอิงแบบวนซ้ำอาจเกิดขึ้นระหว่างอินสแตนซ์ของข้อมูลประเภทที่เปลี่ยนแปลงได้ เช่นในสคริปต์ Python นี้:
mydict : dict [ str , str ] = { "this" : "that" , "these" : "those" } mydict [ "myself" ] = mydict print ( mydict )ฟังก์ชันจะส่งออกค่าโดยที่แสดงถึงการอ้างอิงแบบวนซ้ำ ในกรณีนี้คือการอ้างอิงไปยังพจนานุกรม print(mydict){'this':'that','these':'those','myself':{...}}{...}mydict
ในสเปรดชีต
การอ้างอิงแบบวนซ้ำยังเกิดขึ้นในสเปรดชีตเมื่อเซลล์สองเซลล์ต้องการผลลัพธ์ของกันและกัน ตัวอย่างเช่น หากค่าในเซลล์ A1 จะได้มาจากการบวก 5 กับค่าในเซลล์ B1 และค่าในเซลล์ B1 จะได้มาจากการบวก 3 กับค่าในเซลล์ A1 จะไม่สามารถคำนวณค่าใดๆ ได้ (แม้ว่าข้อกำหนดจะเป็น A1:=B1+5 และ B1:=A1-5 ก็ยังคงมีการอ้างอิงแบบวนซ้ำอยู่ดี ยิ่งไปกว่านั้น หาก A1=3 และ B1=-2 ก็สามารถใช้ได้กับทั้งสองสูตร ก็ยิ่งทำให้ปัญหาซับซ้อนขึ้นไปอีก เพราะยังมีค่าอื่นๆ อีกมากมายนับไม่ถ้วนของ A1 และ B1 ที่สามารถใช้ได้กับทั้งสองกรณี)
การอ้างอิงแบบวงกลมในเวิร์กชีตอาจเป็นเทคนิคที่มีประโยชน์มากสำหรับการแก้สมการโดยปริยาย เช่นสมการโคลบรูค และสมการอื่นๆ อีกมากมาย ซึ่งอาจต้องใช้อัลกอริทึม Newton-Raphsonที่ยุ่งยากใน VBA หรือการใช้มาโคร[ 4 ]
ควรแยกความแตกต่างระหว่างกระบวนการที่มีการอ้างอิงแบบวนซ้ำกับกระบวนการที่ไม่สามารถคำนวณได้และกระบวนการที่เป็นการคำนวณแบบวนซ้ำที่มีผลลัพธ์สุดท้าย กระบวนการหลังนี้อาจล้มเหลวในสเปรดชีตที่ไม่ได้ออกแบบมาเพื่อรองรับ แต่ก็ยังคงถูกต้องตามหลักตรรกะ[ 3 ]
ดูเพิ่มเติม
- ความสัมพันธ์เชิงสาเหตุ – กระบวนการหนึ่งส่งผลต่ออีกกระบวนการหนึ่งอย่างไร
- การรายงานแบบวนซ้ำ – ดูเหมือนว่าจะมีแหล่งข้อมูลหลายแหล่งสำหรับข้อมูลจากแหล่งเดียว
- Citogenesis – การรายงานแบบวงกลมบน Wikipedia
- ปัญหาการหยุดทำงาน – ปัญหาในวิทยาการคอมพิวเตอร์
- เรื่องสั้นMS Fnd in a Lbry โดย Hal Draper
- ฟังก์ชันซ้อน – ฟังก์ชันที่มีชื่อซึ่งถูกกำหนดไว้ภายในฟังก์ชันอื่น
- Quine (วิทยาการคอมพิวเตอร์) – โปรแกรมที่จำลองตัวเองได้
- การโต้แย้งแบบถอยหลัง – ปัญหาเชิงปรัชญา
- การอ้างอิงตนเอง – ประโยค แนวคิด หรือสูตรที่อ้างถึงตัวมันเอง
- "ถังของฉันมีรู" – เพลงเด็กสุดคลาสสิกและตลกขบขัน
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การอ้างอิงแบบวงกลม
การ อ้างอิงแบบวงกลม (หรือ วงจรการอ้างอิง [ 1 ] ) คือชุดของ การอ้างอิง ที่วัตถุสุดท้ายอ้างอิงถึงวัตถุแรก ส่งผลให้เกิดวงปิด
ตัวอย่างง่ายๆ
คนแปลกหน้าถามคนท้องถิ่นว่าห้องสมุดประจำเมืองอยู่ที่ไหน "อยู่ตรงหน้าไปรษณีย์เลย" คนท้องถิ่นตอบ คนแปลกหน้าพยักหน้า แล้วถามต่อว่า "แล้วไปรษณีย์อยู่ไหนล่ะ?"
ในภาษา
การอ้างอิงแบบวนซ้ำไม่ควรสับสนกับ ความผิดพลาดทางตรรกะ ของการ ให้เหตุผลแบบวนซ้ำ แม้ว่าการอ้างอิงแบบวนซ้ำมักจะไม่เป็นประโยชน์และไม่เปิดเผยข้อมูลใดๆ เช่น รายการสองรายการในดัชนีหนังสือที่อ้างอิงถึงกันและกัน...
ในการเขียนโปรแกรมคอมพิวเตอร์
การอ้างอิงแบบวนซ้ำสามารถเกิดขึ้นได้ใน การเขียนโปรแกรมคอมพิวเตอร์ เมื่อโค้ดส่วนหนึ่งต้องการผลลัพธ์จากอีกส่วนหนึ่ง แต่โค้ดส่วนนั้นก็ต้องการผลลัพธ์จากส่วนแรกเช่นกัน ตัวอย่างเช่น ฟังก์ชัน posn และ plus1 ในโปรแกรม Python ต่อไปนี้ประกอบกันเป็นการอ้างอิงแบบวนซ้ำ: