ฟังก์ชั่นการเขียนซ้ำสากล [ปิด]


9

มีการสร้างฟังก์ชั่นเรียกซ้ำแบบสากลสั้น ๆหรือไม่? คำจำกัดความทั้งหมดที่ฉันได้เห็นเกี่ยวข้องกับการกำหนดหมายเลขเครื่องทัวริงในทางใดทางหนึ่งซึ่งเป็นไปได้ แต่ดูเหมือนยากและไม่สามารถจัดการได้ในการเขียนด้วยภาษาโปรแกรมระดับสูงกว่า (เช่น Python, Haskell เป็นต้น)


แต่เดิมคำถามถูกถามที่SOดูเหมือนว่าเหมาะสมกว่าที่นี่
sdcvvc

1
ความเข้าใจของฉันคือสิ่งที่ฟังก์ชั่น recursive สากลทำคือการให้ฟังก์ชั่น recursive (หรือเครื่องทัวริงเท่ากัน) เพื่อให้ผลลัพธ์สามารถคำนวณได้จากดัชนีของฟังก์ชัน recursive และอินพุท ดังนั้น“ ฟังก์ชั่นเรียกซ้ำโดยไม่ใช้เครื่องทัวริง” จึงไม่น่าเชื่อถือ
Tsuyoshi Ito

3
ไม่ใช่ระดับการวิจัย ล่ามสำหรับภาษาทัวริงที่สมบูรณ์คือฟังก์ชันเรียกซ้ำสากล
Warren Schudy

คำตอบ:



13

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

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


10

นักแปลสำหรับภาษาใด ๆ ที่เป็นทัวริงสมบูรณ์เป็นฟังก์ชันแบบเรียกซ้ำสากล มีล่ามสำหรับภาษาระดับสูงเช่น C ++ หรือ Python

มีหมายเลข Godel อยู่ แต่โดยปริยาย ตัวอย่างเช่นการคำนวณรหัส C ++ สำหรับฟังก์ชั่นวนซ้ำg เป็นดัชนีสำหรับ g.


นักแปลสำหรับเครื่องทัวริง (หรือเครื่องลงทะเบียนหรือฟังก์ชั่นแบบเรียกซ้ำ) ก็เป็นฟังก์ชั่นเรียกซ้ำแบบสากลและไม่ยากที่จะนำไปใช้ ฉันใช้มันใน C ++ เมื่อหลายปีก่อนและฉันค่อนข้างมั่นใจว่ามันจะง่ายกว่าใน Python ใช้ Google มีตัวจำลองฟรีมากมายบนอินเทอร์เน็ตและบางตัวก็เป็นแบบโอเพ่นซอร์ส
Kaveh

8

ฟังก์ชั่นสากลuสามารถเขียนได้ค่อนข้างง่ายในภาษาที่เหมือน Haskell (ไม่มีผลข้างเคียง, ฟังก์ชั่นการสั่งซื้อที่สูงขึ้น) กล่าวคือ:

u f x = f x

ฟังก์ชั่นuที่เป็นสากลเพราะมันยอมรับ (คำอธิบายของ) โปรแกรมfและเทปการป้อนข้อมูลxและบอกคุณผลของการทำงานในfx

แม้ว่าคำตอบนี้จะไม่ร้ายแรงอย่างสิ้นเชิง แต่ก็แสดงให้เห็นว่าคอมไพเลอร์หรือล่ามสำหรับภาษาที่เหมือน Haskell มีส่วนประกอบอาคารทั้งหมดที่จำเป็นสำหรับฟังก์ชั่นสากล คุณธรรมของเรื่องคือเวลาที่ดีกว่าที่จะเรียนรู้วิธีคอมไพเลอร์และล่ามทำงานมากกว่าที่จะกังวลเกี่ยวกับการใช้งานฟังก์ชั่นสากลในแง่ของเครื่องทัวริง


อย่างไรก็ตามuรับฟังก์ชั่น - ฉันเรียกมันว่าเป็นฟังก์ชั่นที่สูงกว่า ฉันต้องการuที่จะเป็นจำนวนเต็มหรือประเภทข้อมูลพีชคณิตปกติ ฉันไม่ได้บังคับรูปแบบการคำนวณใด ๆ ที่เฉพาะเจาะจงตราบใดที่อาร์กิวเมนต์uเป็นสิ่งที่จับต้องได้ตัวอย่างเช่นมันสามารถถูกทำให้เป็นอนุกรมจาก / ถึงสตริง
sdcvvc

บนเครื่องที่เกิดขึ้นจริง (เมื่อรวบรวมรหัส) uจะปิดซึ่งเป็นลำดับที่แน่นอนของไบต์ แม้ในทฤษฎี utm ตามปกติจำนวนเต็มที่uใช้แทนฟังก์ชัน
Andrej Bauer

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