1
ทำให้ฉันสับสนเพื่อแก้ไขปัญหาการหยุดชะงัก
โปรดทราบ:โดยธรรมชาติแล้วข้อมูลจำเพาะสำหรับความท้าทายนี้ยากที่จะเข้าใจ มันอาจจะต้องมีหลักสูตรน้องใหม่อย่างน้อยในทฤษฎีการคำนวณหรือการอ่านพื้นหลังเทียบเท่า นอกจากนี้ความท้าทายนั้นค่อนข้างยาก การตอบมันจะต้องเขียนล่ามทั้งหมดสำหรับบางส่วนของภาษาที่คุณเลือกและไม่เพียงแค่นั้น แต่ล่ามจะต้องอยู่ในรูปแบบของบางอย่างเช่นควินิน หากคำตอบของคุณไม่ได้ทำทั้งหมดนี้ก็เกือบจะไม่เป็นไปตามข้อกำหนด คุณไม่จำเป็นต้องแก้ปัญหาการหยุดพัก (แม้แต่บางส่วน) เพื่อแก้ปัญหานี้ อย่างไรก็ตามคุณเกือบจะต้องเขียนล่าม (ของภาษาที่คุณใช้, เขียนในภาษาเดียวกันกับที่แปล) แม้ว่ามันจะไม่จำเป็นต้องมีคุณสมบัติที่สมบูรณ์ นี่คือสิ่งที่ทำให้สิ่งนี้เป็นความท้าทายที่น่าสนใจ ฉันสัญญาว่าจะได้รับรางวัลเงินรางวัล 500 ชี้ไปที่คำตอบแรกที่ตรงกับสเป็คและนี้จะได้รับการตอบ BF โจของพระบาทสมเด็จพระเจ้าอยู่หัว ความท้าทาย เวอร์ชันที่เรียบง่ายและเรียบง่ายของการพิสูจน์ของอลันทัวริงเรื่องความไม่สามารถแก้ปัญหาการหยุดชะงักได้มีดังนี้: สมมติว่าฉันได้เขียนโปรแกรมFที่มีไว้เพื่อแก้ปัญหาโปรแกรมหยุดทำงาน นั่นคือFใช้ซอร์สโค้ดของโปรแกรมอื่นเป็นอินพุตและF(G)ควรส่งคืน1ถ้าGหยุดและ0อย่างอื่น แต่ถ้าฉันให้โปรแกรมของฉันแก่คุณคุณFก็สามารถสร้างโปรแกรมอื่นHได้นั่นคือการรันโปรแกรมของฉันด้วยHการป้อนข้อมูลของมัน หากF(H)ผลตอบแทน0นั้นHกลับ0มา แต่อย่างอื่นมันจงใจเข้าไปในวงไม่สิ้นสุด สิ่งนี้นำไปสู่ความขัดแย้งและเราต้องสรุปว่าFไม่สามารถแก้ปัญหาการหยุดชะงักได้ งานของคุณคือการเขียนโปรแกรมHแต่ด้วยการบิด: ฉันจะไม่ให้โปรแกรมของฉัน แต่โปรแกรมของคุณจะได้รับซอร์สโค้ดของโปรแกรมเป็นอินพุต นั่นคือ: โปรแกรมของคุณจะได้รับโปรแกรมของฉันเป็นอินพุตในรูปแบบซอร์สโค้ด (เช่นเป็นไฟล์หรืออินพุตบรรทัดคำสั่งรายละเอียดขึ้นอยู่กับคุณ) โปรแกรมของฉันจะเขียนเป็นภาษาเดียวกับโปรแกรมของคุณและยังป้อนข้อมูลในรูปแบบของสตริงซอร์สโค้ด หากโปรแกรมของฉันกลับมา0เมื่อให้โปรแกรมของคุณเป็นอินพุตโปรแกรมของคุณควรหยุด (และกลับมา0) เมื่อให้โปรแกรมของฉันเป็นอินพุต (ความหมายที่แท้จริงของ "การรักษา0" ขึ้นอยู่กับคุณ) หากโปรแกรมของฉันไม่หยุดทำงานหรือหากโปรแกรมส่งคืนสิ่งอื่นนอกเหนือจาก0เมื่อให้โปรแกรมของคุณเป็นอินพุตโปรแกรมของคุณควรทำงานต่อไปเรื่อย ๆ การบิดคือการทำให้ยากขึ้นจริงๆคุณต้องทำตามกฎต่อไปนี้: คุณไม่สามารถใช้ฟังก์ชันในตัวexecหรือevalชนิดใดก็ได้ คุณไม่สามารถใช้วิธี "โกง" เพื่อรับซอร์สโค้ดของโปรแกรมของคุณเอง (เช่นคุณไม่สามารถพูดว่า "บันทึกสิ่งนี้ในไฟล์ชื่อ 'โปรแกรม'" …