เป็นโน้ตดนตรีทัวริง - เสร็จสมบูรณ์?


63

ฉันสงสัยว่าเป็นภาษาโน้ตดนตรีทัวริง - เสร็จสมบูรณ์ ?

ความคิดแรกของฉันคือมีลูปในโน้ตดนตรี แต่ไม่มีวิธีเขียนสาขาที่มีเงื่อนไขใช่ไหม

ฉันไม่ใช่นักดนตรีดังนั้นบางทีบางคนสามารถช่วยเติมเต็มช่องว่างได้?


7
สิ่งที่เป็นภาษาพาร์ทิชันเพลง ? สัญกรณ์ดนตรีบางรูปแบบ?
ริ้น

4
ฉันไม่รู้อะไรมากเกี่ยวกับโน้ตดนตรี: คุณสามารถเข้ารหัส "ตัวแปรผันแปร" (หรือ "เทป") ได้ไม่ จำกัด จำนวนหรือไม่? ไม่เช่นนั้นฉันไม่เห็นว่ามันจะสมบูรณ์แบบได้อย่างไร
nikie

ไม่มันไม่ได้
shabunc

@nikie ผมไม่แน่ใจว่าถ้าการกระทำบทเป็นฟังก์ชั่นการจัดเก็บหรือสิ่งที่คล้ายกัน ...
Klaim

2
แน่นอนว่าทัวริงสมบูรณ์เพียงใช้ 8 บันทึกที่แตกต่างกันเพื่อเป็นตัวแทนของ 8 ตัวอักษรของ Brainfuck :)
Chris Burt-Brown

คำตอบ:


37

ใช่ถ้าคุณยอมรับคำแนะนำเล็กน้อยสำหรับการขนย้าย - ผิดปกติ แต่ไม่ทราบ

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

จากคู่มือ Choon:

  • transpositions

    มีคำแนะนำการขนย้ายสามคำคือ up ( +), down ( -) และยกเลิก ( .) คำแนะนำการขนย้าย transposts บันทึกที่ตามมาทั้งหมดเล่นด้วยจำนวนของบันทึกล่าสุดที่เล่น คำสั่งยกเลิก ( .) ตั้งค่าการขนย้ายกลับเป็นศูนย์

    transpositions เป็นแบบสะสมดังนั้นรหัสชุนที่จะย้ายในอนาคตข้อสังเกตเพิ่มขึ้น 2 b+และ 4 b++จะเป็น นอกจากนี้ค่าที่ใช้เป็นค่าของบันทึกย่อก่อนหน้านี้หลังจากที่มีการนำb+b+transpositions มาใช้ดังนั้นบันทึกย่อในอนาคตเพิ่มขึ้น 6 ไม่ใช่ไม่ใช่ 4

  • จอห์นเคจ

    คำสั่ง John Cage ( %) ทำให้ข้อความเงียบหนึ่งรายการในสตรีมเอาต์พุต ค่าการขนย้ายของ John Cage เป็นศูนย์ - %-และ%+ไม่มีตัวเลือก (ยกเว้นว่าจะเพิ่มความเงียบเดียวลงในเอาต์พุต)

  • ทำซ้ำแท่ง

    คำแนะนำของ Repeat Bars ( ||:และ:||) ล้อมรอบลูป การวนซ้ำจะดำเนินการตามจำนวนครั้งที่ระบุโดยบันทึกล่าสุดที่เล่นก่อนที่จะ||:พบ ศูนย์หรือค่าลบจะหมายถึง Choon :||ทันทีจะข้ามไปเริ่มเล่นจากการจับคู่ John Cage หมายถึงการทำซ้ำตลอดไป - %||::||เป็นการวนซ้ำไม่สิ้นสุด

  • ส้อมเสียง

    คำแนะนำในการปรับแต่งส้อม~ให้วิธีการแบ่งออกจากลูป หากพบส้อมเสียงในลูปและโน้ตตัวสุดท้ายที่เล่นคือโน้ตของค่าAChoon จะกระโดดทันทีเพื่อเริ่มเล่นหลังจาก:||คำแนะนำถัดไป หากไม่มีการ:||เรียนการสอนเพิ่มเติม(ความหมาย~ถูกนำไปใช้นอกแถบการทำซ้ำใด ๆ ) ประสิทธิภาพจะสิ้นสุดลงทันที

  • เครื่องหมาย

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

    เมื่อมีเครื่องหมายสองตัวหรือมากกว่าเกิดขึ้นตามลำดับหรือเครื่องหมายตามคำแนะนำการเล่นจากเครื่องหมายพวกเขาจะต้องแยกจากกันโดยช่องว่าง

  • เล่นจากผลลัพธ์

    คำสั่งเล่นจากการส่งออก ( =) ช่วยให้คุณสามารถเล่นโน้ตที่เล่นในสตรีมเอาท์พุทอีกครั้ง คุณสามารถดูบันทึกด้วยจำนวน - โน้ตที่ 5 เล่นตั้งแต่เริ่มโครงการจะ=5โดยจำนวนญาติ - 3 บันทึกล่าสุดเล่นจะเป็น=-3หรือเครื่องหมาย - โน้ตเล่นหลังจากเครื่องหมายจะเป็นx=x

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

จอห์นเคเป็นเพียงส่วนที่เหลือเป็นส้อมคือ (ประมาณ) Dal Segno และเครื่องหมายเป็น Segno ฉันคิดว่าอาจมีการปรับจูนฟอร์คกิ้งโดยนักแสดงเพิ่มเติมซึ่งเป็นนักแสดงหลักตอบ แต่หลักการก็เหมือนกัน


1
ฉันจะบอกว่านี่เป็นคำตอบที่ดีที่สุดสำหรับคำถาม: ไม่มีคำตอบอื่นใดที่พิสูจน์ได้ว่าโน้ตดนตรีนั้นไม่ใช่ทัวริงที่สมบูรณ์
K.Steff

24

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


13
มันเรียงลำดับของการกระโดดแบบมีเงื่อนไขใช้ร่วมกับเครื่องหมายการทำซ้ำ: "ในการเล่นซ้ำครั้งแรกเล่นส่วนนี้ในการเล่นซ้ำครั้งที่สองเล่นในส่วนนั้น" ตัวนับซ้ำ (ที่คุณถืออยู่ในหัวขณะเล่น) คือสถานะ แต่จริงๆแล้วมันไม่มีเทปที่ไม่มีขีด จำกัด ที่บรรจุสถานะ
Jesper

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

11
@Nikie: อย่าสับสน abstractions กับความเป็นจริง แลมบ์ดาแคลคูลัสมีแนวคิดของการประเมินตามเงื่อนไขการเรียกซ้ำใช้สำหรับทั้งการวนลูปและการกระโดดและการคำนวณสถานะเป็นผลลัพธ์ของการประเมินนิพจน์ แนวคิดมี พวกเขาเพิ่งจะนำไปใช้ในวิธีที่แตกต่างจากการเขียนโปรแกรมคอมพิวเตอร์จริง
Mason Wheeler

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

9
@MasonWheeler: แลมบ์ดาแคลคูลัสคือการเขียนโปรแกรมคอมพิวเตอร์จริง
dan_waterworth

23

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

ความคิดของ "โน้ตดนตรี" นั้นลื่นเล็กน้อย มีการแกะสลักที่ได้มาตรฐานจำนวนมากที่ใช้ อย่างไรก็ตาม มีนักแต่งเพลงที่ใช้ซองจดหมายที่เขียนสิ่งบ้าทุกชนิดลงบนกระดาษ

สมมติว่าคุณต้องการมุ่งเน้นไปที่ชุดย่อยของโน้ตดนตรีที่ถือว่าเป็นมาตรฐานพอที่จะเป็นส่วนหนึ่งของ Finale หรือ Sibelius หรือชุดเครื่องมือแกะสลักหลัก

ดังนั้น.

สำหรับ Python (หรือ C หรืออะไรก็ตาม) คุณกำหนดสัญลักษณ์, เทป, กฎการเปลี่ยนและการกระทำต่าง ๆ ที่ปรับปรุงเทปเพื่อสะท้อนการเปลี่ยนแปลงสถานะและการเคลื่อนไหวของเทปการอ่านและการเขียนสัญลักษณ์บนเทป

การใช้ "โน้ตดนตรี" เราจะต้องกำหนดสัญลักษณ์และเทป stateful กฎการเปลี่ยนแปลงและการกระทำต่าง ๆ ที่ปรับปรุงเทป

สิ่งที่เราขาดคือเทปและกฎที่แจ้งให้นักดนตรีทราบถึงวิธีการตอบสนองต่อสัญลักษณ์บนเทปและวิธีการอัปเดตเทปนั้น

ในแง่หนึ่งเสียงที่ไหลรอบ ๆ ในอากาศอาจเป็นเทปที่มีสภาวะ แต่. ไม่มีวิธีง่ายๆในการย้อนกลับเทป การขาดการกรอกลับนี้หมายความว่านักแสดงจะต้องเก็บ "เทป" ส่วนตัวไว้บางประเภท

สิ่งนี้ทำให้เกิดโน้ตดนตรีนอกและเป็นคำแนะนำพิเศษเกี่ยวกับดนตรีสำหรับนักแสดง


ดีจริงๆคุณไม่สามารถย้อนกลับโปรแกรมทำงานอย่างใดอย่างหนึ่ง ... ( แต่ใช่ฉันจะได้รับสิ่งที่คุณหมายเกี่ยวกับการปรับปรุงรัฐ แต่สามารถที่ในการเปิดเป็นภาษาทำงาน?)
Izkata

2
คุณไม่ได้กรอกลับโปรแกรม คุณกรอกลับเทป ประเด็นก็คือเทปทัวริงสามารถเข้าถึงตำแหน่งทั้งหมดได้ มันเป็น "Random Access Memory" ทำให้เวลาเชิงเส้นง่ายขึ้นด้วยการเคลื่อนที่ไปข้างหน้าและย้อนกลับ
S.Lott

โอ้ฉันจำได้ว่าตอนนี้ขอโทษ ฉันคิดของ "เทป" เป็นสิ่งที่เพลงที่เขียนบนด้วยเหตุผลบางอย่าง =)
Izkata

การสร้างเครื่องทัวริงเป็นวิธีมาตรฐานในการพิสูจน์ว่าทัวริงสมบูรณ์ แต่การสนทนานั้นไม่เป็นความจริง - เพียงเพราะคุณไม่สามารถหาวิธีสร้างเครื่องทัวริงไม่ได้หมายความว่าบางอย่างไม่ได้ทำให้ทัวริงสมบูรณ์ เครื่องทัวริง (พร้อมเทปและทั้งหมด) เป็นเพียงนามธรรมโดยพลการที่มีพลังในการคำนวณเพียงพอ มี abstractions อื่น ๆ ที่ทรงพลังเช่นเดียวกับที่ไม่มีแนวคิดเรื่องเทป ลองดูที่แลมบ์ดาแคลคูลัส, SKI แคลคูลัสหรือภาษาลึกลับบางอย่าง (Fractran เจ๋ง)
Tikhon Jelvis

3

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

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

Canon 2 ต่อ Tonus จากการเสนอขายดนตรีของ Bachเป็นชิ้นที่วนลูปไม่สิ้นสุดซึ่งมีระดับความสูงขึ้นทุกขั้นตอนในแต่ละครั้งตราบใดที่มีการแสดง

เมื่อเร็ว ๆ นี้ก็เป็นธรรมดาที่จะเห็นคำแนะนำเช่น "ซ้ำสำหรับแต่ละศิลปินเดี่ยว" ในตัวอย่างเช่นรุ่น notated ของชิ้นดนตรีแจ๊สเช่นเดฟเบคส์ของใช้เวลาห้า

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


1

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

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


1
สิ่งที่คุณระบุไว้ไม่จำเป็นสำหรับภาษาทัวริงที่สมบูรณ์ แลมบ์ดาแคลคูลัสมีแอปพลิเคชั่นตัวแปรและแลมบ์ดาเท่านั้น (เช่นไม่มีลูปรัฐหรือคำสั่ง) แต่ทัวริงสมบูรณ์ การคำนวณแบบอื่น ๆ เช่น SKI combinators
Tikhon Jelvis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.