อะไรทำให้ภาษาทัวริงสมบูรณ์


79

คุณสมบัติ / โครงสร้างภาษาขั้นต่ำที่ทำให้ทัวริงสมบูรณ์คืออะไร


21
จะดีกว่าไหมถ้าแค่ใช้ google en.wikipedia.org/wiki/Turing_completeness
aml90

2
สวัสดี Curious Cat ยินดีต้อนรับสู่โปรแกรมเมอร์! การโทรหารายการไม่อยู่ในหัวข้อที่นี่: ฉันได้ลบส่วนนั้นออกจากคำถามของคุณ ที่กล่าวว่าการแสวงหานี้กว้างมาก: มีปัญหาเฉพาะที่คุณกำลังทำงานที่คุณคิดเกี่ยวกับทัวริงสมบูรณ์?

3
@amalantony: เช่นเดียวกับเชิงอรรถ
Bobby

สำหรับมุมมองของวิทยาการคอมพิวเตอร์ให้ดูที่นี่
กราฟิลส์

คำตอบ:


73

tarpit ทัวริงเป็นชนิดของการเขียนโปรแกรมภาษาลึกลับซึ่งมุ่งมั่นที่จะเป็นทัวริงสมบูรณ์ในขณะที่ใช้องค์ประกอบไม่กี่เท่าที่เป็นไปได้ Brainfuckอาจเป็นผ้าใบกันน้ำที่รู้จักกันดีที่สุด แต่ก็มีมากมาย

  • เล็กน้อยและJotภาษาการทำงานที่มีสองและสามสัญลักษณ์ตามลำดับขึ้นอยู่กับเอสเค (I) Combinator แคลคูลัส

  • OISC ( หนึ่งชุดคำสั่งคอมพิวเตอร์ ) หมายถึงประเภทของการคำนวณเชิงบังคับที่ต้องการเพียงหนึ่งคำสั่งของอาร์กิวเมนต์หนึ่งตัวหรือมากกว่าโดยปกติแล้ว“ ลบและสาขาถ้าน้อยกว่าหรือเท่ากับศูนย์” หรือ“ ลบลบและข้ามถ้ายืม” x86 MMUใช้คำสั่งเดิมและทำให้ทัวริงสมบูรณ์

โดยทั่วไปสำหรับภาษาที่จำเป็นที่จะต้องทำให้ทัวริงสมบูรณ์มันต้องการ:

  1. รูปแบบของการทำซ้ำตามเงื่อนไขหรือการกระโดดตามเงื่อนไข (เช่นwhile, if+ goto)

  2. วิธีการอ่านและเขียนที่เก็บข้อมูลบางรูปแบบ (เช่นตัวแปรเทป)

สำหรับแลมบ์ดาแคลคูลัส - ซึ่งเป็นภาษาที่ใช้งานได้สำหรับ TC มันต้องการ:

  1. ความสามารถในการสรุปฟังก์ชั่นนามธรรมเหนือข้อโต้แย้ง (เช่น lambda abstraction, quote)

  2. ความสามารถในการใช้ฟังก์ชั่นกับข้อโต้แย้ง (เช่นการลด)

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

พูดอย่างเคร่งครัดไม่จำเป็นต้องใช้ I / O สำหรับทัวริง - สมบูรณ์; TC เพียง แต่อ้างว่าภาษาสามารถคำนวณฟังก์ชันที่คุณต้องการไม่ใช่ว่าสามารถแสดงผลลัพธ์ได้ ในทางปฏิบัติทุกภาษาที่มีประโยชน์มีวิธีการโต้ตอบกับโลกอย่างใด


สำหรับภาษาที่จำเป็นตัวแปรง่ายมีเพียงพอหรือไม่ ฉันอยู่ภายใต้ความประทับใจว่าการรวบรวมบางประเภท (เช่นอาร์เรย์หรือรายการที่ลิงก์) เป็นสิ่งจำเป็น
luiscubal

1
@luiscubal คุณต้องสามารถระบุจำนวนข้อมูลโดยพลการ ด้วยตัวแปรอย่างง่ายคุณสามารถแสดงจำนวนข้อมูลที่ตัวแปรนั้นมี จะทำอย่างไรถ้าคุณต้องการแสดงข้อมูล N + 1 ที่แตกต่างกัน หนึ่งอาจโต้แย้งว่าด้วยเทคนิคเช่น Fractran เล่นคุณสามารถทำได้แม้ในตัวแปรง่าย ๆ ... แต่นั่นไม่ใช่สิ่งที่คุณถาม

ไม่จำเป็นต้องใช้ภาษาต้องรองรับลูปENDLESSหรือไม่
sergiol

พูดว่า "ทุกภาษาที่มีประโยชน์มีวิธีโต้ตอบกับโลก" Algol 60 ไม่ได้มีการกำหนดวิธีการในการมีปฏิสัมพันธ์กับโลก I / O ทั้งหมดของคุณในโปรแกรม Algol 60 ทำโดยการเรียกฟังก์ชั่นห้องสมุดและฟังก์ชั่นห้องสมุดอาจแตกต่างกันอย่างสิ้นเชิงในการดำเนินการที่แตกต่างกัน แต่ฉันขอถอนตัวจากการสนทนาใด ๆ ว่า Algol 60 นั้นมีประโยชน์หรือไม่
โซโลมอนช้า

15

จากมุมมองเชิงปฏิบัติที่มากขึ้น: หากคุณสามารถแปลโปรแกรมทั้งหมดด้วยภาษาทัวริงที่สมบูรณ์เป็นภาษาของคุณจากนั้น (เท่าที่ฉันรู้) ภาษาของคุณต้องทัวริงสมบูรณ์ ดังนั้นหากคุณต้องการตรวจสอบว่าภาษาที่คุณออกแบบนั้นสมบูรณ์แบบทัวริงหรือไม่คุณสามารถเขียน Brainf *** ไปยัง YourLanguage คอมไพเลอร์และพิสูจน์ / แสดงให้เห็นว่าสามารถรวบรวมโปรแกรม BF ทางกฎหมายทั้งหมดได้

ในการชี้แจงฉันหมายถึงว่านอกเหนือจากล่ามสำหรับ YourLanguage แล้วคุณยังเขียนคอมไพเลอร์ (ในภาษาใดก็ได้) ที่สามารถคอมไพล์โปรแกรม BF ใด ๆ ไปยัง YourLanguage (แน่นอนว่ามีความหมายเหมือนกัน)


11
ใช่ว่าจะเป็นวิธีที่ใช้งานได้จริงมากที่สุดในการเข้าถึง </sarcasm>
Robert Harvey

13
@ RobertHarvey มีจุด แต่ความคิดทั่วไปมีความสำคัญมาก Brainfuck ได้รับการพิสูจน์แล้วว่าสมบูรณ์แบบและเรียบง่ายมากเมื่อภาษาการเขียนโปรแกรมดำเนินไป สำหรับภาษาโปรแกรมที่ไม่มีความลับการใช้ล่ามสมสมองอาจง่ายกว่าและเร็วกว่าการพิสูจน์อย่างเข้มงวดในที่ห่างไกล (ฉันสามารถติดตั้ง BF ในสองสามบรรทัดของ Python ได้ แต่ฉันไม่แน่ใจว่าจะเริ่มต้นจากที่ใด พิสูจน์ได้ว่า Python กำลังทำให้สมบูรณ์); และภาษาที่ได้รับแรงบันดาลใจจากสมองซีกโลกเหนือลึกลับหลายภาษาเป็นที่รู้กันว่าทัวริงสมบูรณ์เพราะเป็นที่ทราบกันดีว่าพวกเขาจับคู่กับ brainfuck อย่างไร

7
@ RobertHarvey: ทำไมไม่ แน่นอนว่าคนที่ออกแบบภาษาของตนเองจะสามารถเขียนคอมไพเลอร์ BF ลงไปได้ (ถ้าจำเป็นและหาภาษาอื่นที่เหมาะสม)
Anton Golov

5
@delnan: คุณจะต้องพิสูจน์ว่าล่าม BF ของคุณใช้ข้อมูลจำเพาะ BF อย่างถูกต้อง IOW คุณจะต้องพิสูจน์ว่าล่าม BF ของคุณคือในความเป็นจริงแล้วล่าม BF ไม่ใช่ล่ามภาษา BF ที่ อาจหรือไม่ทัวริงเสร็จสมบูรณ์
Jörg W Mittag

2
@ DarekNędzaนั่นเป็นเพียงผลลัพธ์ตามธรรมชาติของวิธีการกำหนดความสมบูรณ์ของทัวริง ส่วนขยายของภาษาทัวริงที่สมบูรณ์จะยังคงเป็นทัวริงที่สมบูรณ์
Anton Golov

8

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

เพื่อตรวจสอบว่ามีบางสิ่งที่ทัวริงสมบูรณ์ดูว่าคุณสามารถใช้เครื่องทัวริงภายใน ในคำอื่น ๆ ตรวจสอบเพื่อดูว่ามันสามารถจำลองต่อไปนี้:

  1. ความสามารถในการอ่านและเขียน "ตัวแปร" (หรือข้อมูลโดยพลการ) : อธิบายตนเองได้ค่อนข้างมาก
  2. ความสามารถในการจำลองการย้ายหัวอ่าน / เขียน : มันไม่เพียงพอที่จะดึงและเก็บตัวแปรได้ นอกจากนี้ยังจะต้องสามารถจำลองความสามารถในการเคลื่อนย้ายส่วนหัวของเทปเพื่ออ้างอิงตัวแปรอื่น ๆ สิ่งนี้สามารถจำลองได้ในภาษาการเขียนโปรแกรมด้วยการใช้โครงสร้างข้อมูลอาเรย์ (หรือเทียบเท่า) หรือในกรณีของบางภาษาเช่นรหัสเครื่องความสามารถในการอ้างอิงตัวแปรอื่น ๆ ผ่านการใช้ "พอยน์เตอร์" (หรือเทียบเท่า)
  3. ความสามารถในการจำลองเครื่องจักรสถานะ จำกัด : แม้ว่าจะไม่ได้กล่าวถึงบ่อยครั้งเครื่องทัวริงเป็นรูปแบบของเครื่องจักรสถานะ จำกัด ที่มักใช้ในการพัฒนา AI อลันทัวริงกล่าวว่าจุดประสงค์ของสหรัฐฯคือการจำลอง "วิธีแก้ปัญหาต่าง ๆ " ของบุคคล
  4. สถานะ "หยุด" : แม้ว่าจะกล่าวถึงบ่อยครั้งชุดของกฎจะต้องสามารถทำซ้ำตัวเองเพื่อนับว่าเป็นการทัวริงที่สมบูรณ์ซึ่งไม่ได้เป็นเกณฑ์ที่ดีจริงๆ ในที่สุดก็สรุป หากพวกเขาไม่สามารถสรุปได้ในทางใดทางหนึ่งไม่ว่าจะเป็นทัวริงที่สมบูรณ์หรืออัลกอริทึมที่กล่าวว่าไม่ใช่ฟังก์ชันที่คำนวณได้ การทำระบบที่สมบูรณ์แบบที่ไม่สามารถสรุปได้ในทางเทคนิคเนื่องจากวิธีการทำงาน (เช่นคอนโซลเกม) ทำให้เกิดข้อ จำกัด นี้โดยการ "จำลอง" สถานะหยุดนิ่งในบางแบบ เพื่อไม่ให้สับสนกับ "ปัญหาการหยุดชะงัก" ฟังก์ชั่น undecidable ที่พิสูจน์ได้ว่า '

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

โปรดทราบว่าไม่มีวิธีที่รู้จักกันในการสร้างระบบทัวริงที่แท้จริงอย่างแท้จริง นี่เป็นเพราะไม่มีวิธีรู้ที่จะจำลองความไร้ขีด จำกัด ของเทปของทัวริงภายในพื้นที่ทางกายภาพ


4

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

Alan Turing สร้างเครื่องจักรทัวริงสากลและหากคุณสามารถแปลโปรแกรมใด ๆ ที่ออกแบบมาเพื่อทำงานกับเครื่องจักรสากลเพื่อให้ทำงานกับภาษาของคุณ สิ่งนี้ยังใช้งานทางอ้อมด้วยดังนั้นคุณสามารถพูดได้ว่าภาษา X กำลังทำให้สมบูรณ์หากโปรแกรมทั้งหมดสำหรับการแปลภาษา Y สมบูรณ์สามารถแปลสำหรับ X ได้เนื่องจากโปรแกรมทัวริงเครื่องสากลทั้งหมดสามารถแปลเป็นโปรแกรม Y ได้

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

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

ในการสร้างภาษาที่ประสบความสำเร็จนั้นต้องการมากกว่าความสมบูรณ์แบบและนี่เป็นความจริงแม้แต่ turing ฉันไม่คิดว่าbrainfuckจะได้รับความนิยมโดยไม่ต้องและ,.


2
"ภาษาการเขียนโปรแกรมนั้นสมบูรณ์หากคุณสามารถทำการคำนวณได้" นั่นคือวิทยานิพนธ์ทัวริสต์ของโบสถ์ไม่ใช่สิ่งที่ทำให้ภาษาทัวริงสมบูรณ์
Rhymoid

@Rymymoid คุณหมายความว่าไม่มีอะไรที่สมบูรณ์แบบจนกว่าคุณจะสามารถใช้ล่ามได้? กล่าวคือ แลมบ์ดาแคลคูลัสไม่สมบูรณ์แม้ว่าจะมีความเท่าเทียมกันหรือไม่
Sylwester

1
ฉันยังคงมองหาคำนิยามที่เชื่อถือได้ของคำศัพท์ทัวริงเทียบเท่าและทัวริงสมบูรณ์ (และทัวริงที่มีประสิทธิภาพ) ฉันเคยเห็นหลายกรณีเกินไปจากผู้คนในกระดานข้อความถึงนักวิจัยในเอกสาร friggin ของพวกเขาซึ่งตีความคำเหล่านี้แตกต่างกัน
Rhymoid

อย่างไรก็ตามฉันตีความ 'ทัวริงสมบูรณ์' ว่าเป็นการจำลองเทียบเท่ากับ Universal Turing Machine (UTM; ซึ่งในทางกลับกันความสามารถในการจำลองเครื่องทัวริงใด ๆ - ดังนั้น 'สากล') ในบทความของทัวริงจากปี 1936 ซึ่งเขาแนะนำเครื่องของเขาเขาได้กำหนดแนวคิดของ UTM และแสดงภาพร่างของการพิสูจน์ว่า UTM นั้นเป็นการจำลองที่เทียบเท่ากับแคลคูลัสแลมบ์ดาของคริสตจักร โดยการทำเช่นนั้นเขาพิสูจน์ว่าพวกเขามีพลังการคำนวณเหมือนกัน วิทยานิพนธ์ของคริสตจักรทัวริงอ้างเอาง่ายๆว่า "นั่นคือพลังการคำนวณทั้งหมดที่คุณจะได้รับ"
Rhymoid

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

4

คุณไม่สามารถบอกได้ว่ามันจะวนซ้ำไม่สิ้นสุดหรือหยุด

-------------

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

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

เนื่องจากเครื่องทัวริงดั้งเดิมของทัวริงมีปัญหาในการหยุดการผลิตที่ไม่สามารถแก้ไขได้เครื่องทัวริงที่สมบูรณ์ของคุณเองก็ต้องมีปัญหาการหยุดพักชั่วคราวเช่นเดียวกัน

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

ตัวอย่างเช่นสมมติว่าคุณต้องการพิสูจน์ว่า Snakes & Ladders เสร็จสมบูรณ์แล้วเนื่องจากบอร์ดมีรูปแบบกริดที่ซ้ำกันอย่างไม่มีที่สิ้นสุด (มีเวอร์ชันอื่นอยู่ด้านบนและด้านซ้าย) ทราบว่าเครื่องจักร Minsky 2 ตัวนับเป็นทัวริงสมบูรณ์ (ซึ่งมี 2 ตัวนับไม่ จำกัด และ 1 สถานะจากจำนวน จำกัด ) คุณสามารถสร้างบอร์ดที่เทียบเท่าได้โดยที่ตำแหน่ง X และ Y ในตารางเป็นค่าปัจจุบันของ 2 ตัวนับ และเส้นทางปัจจุบันคือสถานะปัจจุบัน ปัง คุณเพิ่งพิสูจน์ว่างูและบันไดกำลังทัวริงเสร็จสมบูรณ์


1
ฉันไม่ซื้อข้อโต้แย้งนั้น เพียงเพราะปัญหาการหยุดชะงักไม่สามารถบอกได้สำหรับเครื่องทัวริงไม่ได้บอกเป็นนัย ๆ ว่าสัญลักษณ์ทุกอันที่อนุญาตให้คุณระบุโปรแกรมที่ปัญหาการหยุดชะงักไม่สามารถบอกได้คือทัวริงสมบูรณ์ เห็นได้ชัดว่าการผกผันเป็นจริงเท่านั้น: หากสัญกรณ์เสร็จสมบูรณ์ทัวริงแน่นอนว่าเป็นไปได้ที่จะเขียนโปรแกรมที่ปัญหาการหยุดพักไม่สามารถตัดสินใจได้
5gon12eder

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

4

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

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

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


-1

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

  • ตัวแปร
  • เงื่อนไข (ถ้า / แล้ว ... )
  • การวนซ้ำ (วนซ้ำ / ตัวแบ่งขณะที่ ... )

ต่อไปมา

  • ฟังก์ชั่นไม่ระบุชื่อและชื่อ

เพื่อทดสอบการยืนยันเหล่านี้เริ่มต้นด้วยภาษามาร์กอัปพูด HTML เราสามารถคิดค้น HTML + กับตัวแปรเท่านั้นหรือเงื่อนไขเท่านั้น (MS ไม่ว่ามีความคิดเห็นเงื่อนไข) หรือชนิดของห่วงสร้างบางส่วน (ซึ่งในกรณีที่ไม่มีเงื่อนไขอาจจะจบลงเช่นสิ่งที่ต้องการ<repeat n='4'>...</repeat>) การทำสิ่งเหล่านี้จะทำให้ HTML + อย่างมีนัยสำคัญ (?) มีประสิทธิภาพมากกว่า HTML ธรรมดา แต่จะยังคงเป็นมาร์กอัพมากกว่าภาษาโปรแกรม ด้วยคุณสมบัติใหม่แต่ละอย่างคุณทำให้ภาษาที่ประกาศน้อยลงและมีความจำเป็นมากขึ้น

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

จากนั้นอีกครั้งฉันไม่เคยสำเร็จ CS ของฉัน


2
หากคุณไม่แน่ใจคุณควรทำการวิจัยก่อน fractranเป็นทัวริงสมบูรณ์ที่เป็นbrainf * CK โปรดทราบว่าhtml 5 + CSS 3นั้นกำลังทำให้ทัวริงสมบูรณ์เพราะสามารถใช้กฎ 110ได้

1
ใช่ฉันรู้ แต่ตัวอย่างทั้งหมดที่ให้มามีความลึกลับมากกว่าหรือน้อยกว่า (ในขณะที่อาจจะน่าสนใจหรือน่าประหลาดใจ) คำตอบของฉันเป็นสิ่งที่ใช้งานได้จริงและอาจไม่น้อยเลย ฉันคิดว่ามันเป็นสิ่งสำคัญที่ชี้ให้เห็น - หน้านี้เป็นอันดับ 1 เมื่อค้นหาทัวริง - ครบถ้วนบน Google คำตอบที่นี่คือ IMHO ของการใช้งานเล็กน้อยพูด n00bie ที่ต้องการทราบว่าแตกต่าง HTML จาก PHP หรือ Python ฉันหมายความว่า brainf ck ไม่ได้ถูกเรียกว่า brainf ck โดยไม่มีเหตุผล
ไหล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.