ภาษาการเขียนโปรแกรมใด ๆ ใช้ฟังก์ชั่นวนซ้ำทั่วไปเป็นพื้นฐานหรือไม่?


23

นี่คือไร้เดียงสาและดังนั้นอาจเป็นคำถามที่ไม่ถูกต้องดังนั้นขออภัยล่วงหน้า!

มุมมองของฉันคือว่าทัวริงเครื่องจักรสามารถถูกมองว่าเป็นพื้นฐานการคำนวณสำหรับภาษาโปรแกรมขั้นตอน / จำเป็น ในทำนองเดียวกันแลมบ์ดาแคลคูลัสเป็นพื้นฐานสำหรับภาษาโปรแกรมการทำงาน

ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้ว่าวิทยานิพนธ์โบสถ์ทัวริงยังแสดงให้เห็นความเท่าเทียมกันร่วมกันกับรูปแบบที่สามของการคำนวณ: recursive ฟังก์ชันทั่วไป มีภาษาการเขียนโปรแกรมที่ใช้สิ่งนี้เป็นรูปแบบการคำนวณหรือไม่? ถ้าไม่มีมีเหตุผลทางเทคนิคหรือไม่ เช่นนอกจาก "ยังไม่มีใครลองเลย"


1
ฉันจะบอกว่าเครื่องทัวริงหรือเครื่องลงทะเบียนสากลเป็นพื้นฐานของโปรเซสเซอร์ PL (Assembly PLs) พวกเขาไม่มีฟังก์ชั่น ฟังก์ชั่นเรียกซ้ำเป็นพื้นฐานของ PL ที่จำเป็น พวกเขาไม่มีฟังก์ชั่นการสั่งซื้อที่สูงขึ้น μ
beroal

1
ฉันจะแนะนำให้ดูตรรกะลำดับที่หนึ่งและ Prolog ด้วย
beroal

1
ก่อนหน้า C ++ 11 constexprคุณสามารถ (/ ต้อง) ใช้ 'เทมเพลต' เพื่อทำการคำนวณ ณ เวลาคอมไพล์โดยคอมไพเลอร์ ข้อ จำกัด ของเทมเพลตไม่อนุญาตให้มีการวนซ้ำ แต่คุณสามารถใช้การเรียกซ้ำเพื่อเลียนแบบลูปใดก็ได้เพื่อให้คุณได้รับการอำนวยความสะดวกทัวริงสมบูรณ์ (การเขียนโปรแกรมเมตา) เป็นส่วนหนึ่งของมาตรฐานภาษา C ++ ดูเช่นstackoverflow.com/questions / 189172 / c-templates-
turing

1
ดูเพิ่มเติมที่en.wikipedia.org/wiki/Template_metaprogramming
JimmyB

คำตอบ:


45

μμ

μλ

μλFωfixλλ- แคลคูลัสได้อย่างง่ายดายเพื่อรวมโครงสร้างที่ไม่ใช่ lambdas ไม่มีโมเดลการคำนวณอื่น ๆ ที่กล่าวถึงข้างต้นให้คุณสมบัติที่ดีเหล่านั้นแก่คุณ

เครื่องทัวริงไม่ใช่แบบประกอบหรือเป็นสากล (คุณต้องมี TM สำหรับแต่ละปัญหา) ไม่มีแนวคิดของ "ฟังก์ชั่น", "ตัวแปร" หรือ "องค์ประกอบ" มันก็ไม่เป็นความจริงอย่างแน่นอนว่า TM นั้นเป็นพื้นฐานของ PL ที่จำเป็น - FWIW, PL ที่จำเป็นนั้นมีความใกล้ชิดกับแลมบ์ดานิกิมากกับผู้ควบคุมเครื่องจักรมากกว่าเครื่องทัวริง โปรดดูคำอธิบายโดยละเอียดของPeter J. Landin ว่า"การโต้ตอบระหว่าง ALGOL 60 และ Lambda-Notation ของโบสถ์" หากคุณตั้งโปรแกรมใน Brainf ** k (ซึ่งใช้เครื่องทัวริงค่อนข้างง่าย) คุณจะรู้ว่าเครื่องทัวริงไม่ใช่ความคิดที่ดีสำหรับการเขียนโปรแกรม

μμμN

λλμλλ

ในความเป็นจริงมีทัวริงระบบที่สมบูรณ์จำนวนมากอีกมากมายออกมี แต่พวกเขาขาดคุณสมบัติที่โดดเด่นใด ๆ เกมแห่งชีวิตของ Conway, มาโคร LaTeX และแม้แต่ DNA (บางคนอ้างสิทธิ์) นั้นทัวริงสมบูรณ์ แต่ไม่มีโปรแกรมใดโปรแกรมหนึ่ง (เช่นทำการเขียนโปรแกรมอย่างจริงจัง) กับ Conway หรือศึกษาความซับซ้อนของการคำนวณโดยใช้มาโคร LaTeX พวกเขาขาดคุณสมบัติที่ดี ทัวริงสมบูรณ์ต่อ seเกือบจะไม่มีความหมายเมื่อมันมาถึงการเขียนโปรแกรม

λ-แคลคูลัส.


7
"ไม่มีโปรแกรมที่มี Conway" ... บางคนสร้างเกมทำงานของ Tetris ใน Game of Life ของ Conway ... แน่นอนว่ามันเป็นประโยชน์เช่นเดียวกับช่องว่าง :)
Alexei Levenkov

λλ

@AlexeiLevenkov นั่นเป็นเรื่องจริงอย่างที่สุด ช่องว่างเป็นภาษาที่จำเป็น (ง่าย) เป็นหลักแม้ว่าจะมีไวยากรณ์ที่แปลก แต่ก็มีสิ่งอำนวยความสะดวกสำหรับการคำนวณการไหลพื้นฐานการควบคุมและการจัดการสแต็คกองและ I / O โครงการ QFT บนมืออื่น ๆ ที่จำเป็นต้องใช้การออกแบบคอมไพเลอร์จากลงภาษาที่ง่ายมากกับ RISC สร้างประกอบสำหรับ CPU ที่สร้างขึ้นภายใน Wireworld เหมือนโทรศัพท์มือถือหุ่นยนต์เทิดทูนใช้Metapixels OTCA
การสะกดคำแบบ noncontextual

@AlexeiLevenkov คอมไพเลอร์ Cogol → CGoL จำเป็นต้องใช้งานของคนจำนวนมากในช่วงสี่ปีที่ผ่านมาในขณะที่มีโครงการที่เรียกว่าHaPyLiรวบรวมภาษาที่ซับซ้อนมากขึ้นใน Whitespace ซึ่งเขียนโดยคนคนหนึ่งในเวลาว่าง
การสะกดคำที่ไม่ใช่บริบท

4

การพิมพ์µ-recursive function programming languageใน Google ทำให้ฉันไปที่GitHub repoดังนั้นคำตอบสำหรับคำถามของคุณคือ:

ใช่แล้วมันเรียกว่าสายตาสั้น

มันเขียนใน Haskell โดยวิธี


μ

2
แน่นอน. ฉันแค่สันนิษฐานว่า OP ต้องการหาภาษาดังกล่าวเพื่อศึกษาทฤษฎีหรือบางสิ่งบางอย่างเพื่อไม่ให้พิชิตโลกได้จริง ๆ ด้วย ;-)
Kapol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.