Цікаво, чи є мова нотації Turing-Complete ?
Перша моя думка - це те, що в музичній нотації є петлі, але немає можливості написати умовні гілки, правда?
Я не музикант, тож, можливо, хтось може допомогти заповнити прогалини?
Цікаво, чи є мова нотації Turing-Complete ?
Перша моя думка - це те, що в музичній нотації є петлі, але немає можливості написати умовні гілки, правда?
Я не музикант, тож, можливо, хтось може допомогти заповнити прогалини?
Відповіді:
Так, якщо ви признаєте кілька інструкцій щодо переміщення - нечасто, але невідомо.
Потім ви можете інтерпретувати твір як Choon , який є повним Тьюрінга. Виконавець - це пам'ять: вони повинні запам'ятати кількість нот, на які зараз перенесена п'єса, і всі ноти, які вони грали до цього часу. Очевидно, що це можливо лише для комп’ютера, а може, і для дивака.
З посібника Choon:
Транспозиції
Є три інструкції щодо переміщення: вгору (
+
), вниз (-
) та скасувати (.
). Інструкція з транспозиції переміщує всі наступні ноти, відтворені на суму останньої відтвореної ноти. Інструкція для скасування (.
) встановлює переміщення назад до нуля.Транспозиції є кумулятивними, тому код Choon для перенесення майбутніх нот на 2 є
b+
, а на 4 - биb++
. Також використовуване значення - це значення попередньої примітки після того, як було застосованоb+b+
транспозиції , тому переносить майбутні нотатки на 6, а не на 4.Джон Кейдж
Інструкція Джона Кейджа (
%
) викликає одномоментну тишу у вихідному потоці. Значення транспозиції Джона Кейджа дорівнює нулю -%-
і%+
не має жодного опуску (за винятком того, що до виводу додається одна тиша).Повторити бруски
У повторному Bars інструкція (
||:
і:||
) докласти петлю. Цикл виконає кількість разів, яку вказує остання нотатка, відтворена до того, як||:
відбулася зустріч. Нульове або негативне значення означатиме, що Choon негайно стрибне, щоб почати грати з відповідних:||
. Джон Кейдж означає повторення назавжди -%||::||
це нескінченна петля.Камертон
Інструкція Tuning Fork
~
забезпечує спосіб виходу з циклів. Якщо тюнінг-вилка зустрічається в циклі, а остання відіграна нота мала значенняA
, тоді Choon негайно стрибне, щоб почати програвати після наступної:||
інструкції. Якщо немає ніяких подальших:||
інструкцій (значення~
було використано поза будь-якими повторними рядками), продуктивність негайно припиняється.Маркери
Маркери забезпечують чудову зручність програмування. Маркер - це маленька літера або слово, яке запам'ятовує точку у вихідному потоці. Посилання на маркер (див. Нижче) призведе до відтворення ноти після повторного відтворення маркера. Зауважте, що перенесення вплине на цю нову програну ноту.
Якщо два або більше маркерів трапляються послідовно, або маркер слідує інструкції відтворення маркера, вони повинні бути відокремлені пробілом.
Грати з виходу
Інструкція Play From Output (
=
) дозволяє знову відтворювати ноти, які вже були відтворені у вихідному потоці. Ви можете звернутися до приміток за номером - 5 - й зіграної ноти , так як програма почалася б=5
, за відносним кількістю - 3 - е найостанніша нота буде=-3
або маркером - зіграна нота після маркераx
буде=x
.Це загальна ідіома повторно використовувати маркер і негайно після цього звернутися до нього, як це:
x=x
. Це схоже на вимовуx=x+y
у звичайній мові програмування (деy
представлено ефективне значення транспозиції в даний час).
Джон Кейдж просто відпочинок , камертон це (приблизно) Dal Segno і маркер є Segno. Я припускаю, що камертон може зіграти додатковий виконавець, на який відповідає первинний виконавець, але принцип той же.
Тюрінг повноти вимагає, як мінімум, трьох речей: нескінченний цикл, умовний стрибок (якщо - тоді) та спосіб збереження результатів обчислень десь у пам'яті. Навіть якщо музична нотація мала умовні стрибки, вона не має стану, тому ні, це не є Тьюрінгом.
Стандартним доказом мови, якою Тюрінг повинен бути повний, є написання машини Тьюрінга цією мовою. Це доводить, що існує еквівалентність між мовою (зазвичай її підмножиною) та машиною Тюрінга.
Поняття «Музична нотація» трохи слизьке. Є багато стандартизованої гравюри, яка використовується. Однак. Є композитори, що штовхають конверт, які записують на папір усілякі шалені речі.
Давайте зробимо вигляд, що хочете зосередити увагу на підмножині музичних нотацій, які вважаються достатньо стандартними, щоб бути частиною Фінале або Сибеліуса або деяким набором інструментів для гравірування основного потоку.
Тому.
Для Python (або C або будь-якого іншого) ви визначаєте символи, стрічку, правила переходу та різні дії, які оновлюють стрічку для відображення зміни стану та руху стрічки, читання та записування символів на стрічку.
Використовуючи "Музичну нотацію", ми повинні визначити символи та стан-стрічку, правила переходу та різні дії, які оновлюють стрічку.
Нам не вистачає великої стрічки та правил, які розповідають музикантам, як реагувати на символи на стрічці та як оновити цю стрічку.
У певному сенсі шуми, що протікають у повітрі, можуть стати надзвичайною стрічкою. Але. Немає простого способу перемотати стрічку. Ця відсутність перемотування означає, що виконавцю довелося б зберігати приватну "стрічку" якогось типу.
Це виходить за межі музичної нотації і в деяких інших позамузичних інструкціях виконавцю.
Значна частина нотацій є відкритою для інтерпретації, а вказівки з природної мови є загальноприйнятим аспектом музичної нотації - і були в більшості, якщо не у всій історії західної нотированої музики.
Фермати за визначенням залежать від розсуду виконавця, а це означає, що це залежало б від їх власного стану, який майже завжди змінюється музикою в поєднанні із зовнішніми факторами - тому це викликає деякі питання щодо бездержавного характеру музичної нотації.
Canon 2 за Тонус із музичної пропозиції Баха - це нескінченно розграблений твір, тональність якого щоразу піднімається на весь крок протягом тих пір, поки виконується твір.
З недавніх пір, звичайно, можна побачити такі інструкції, як "повторити для кожного соліста", наприклад, в нотаційній версії джазових п'єс, таких як " Взяти п'ять" Дейва Брубека .
Це сказало, окрім суттєво довільних аспектів, як, наприклад, "Фермата", як свідчать інші відповіді, музичне позначення, окрім загальних символів, ймовірно, не є Тюрінгом повним.
Це не пов'язане з Тюрінгом повних мов, оскільки це описова мова. Немає команд з точки зору обчислення чи модифікації даних, немає станів, немає введення, немає виводу, крім результату самого опису.
Також немає ніяких умовних стрибків залежно від вводу. Коли ви вирішите всі стрибки, ви отримаєте лінійну структуру, а не дерево. Отже, всі "програми", які можна моделювати цією мовою, лінійні, без циклів і стрибків.