Merak ediyorum, müzik gösterim dili Turing-Complete mi?
İlk düşüncem müzikal notasyonda döngüler olduğu, ancak koşullu dallar yazmanın bir yolu olmadığı, değil mi?
Ben müzisyen değilim, belki birileri boşlukları doldurmada yardımcı olabilir?
Merak ediyorum, müzik gösterim dili Turing-Complete mi?
İlk düşüncem müzikal notasyonda döngüler olduğu, ancak koşullu dallar yazmanın bir yolu olmadığı, değil mi?
Ben müzisyen değilim, belki birileri boşlukları doldurmada yardımcı olabilir?
Yanıtlar:
Evet, aktarma için birkaç talimat kabul ediyorsanız - nadir ama bilinmeyen.
Daha sonra bir parçayı Turing tamamlandı olan Choon olarak yorumlayabilirsiniz . Müzikçalar hafızadır: parçanın o anda aktarıldığı nota sayısını ve şimdiye kadar oynadıkları notaları hatırlamaları gerekir. Açıkçası bu sadece bir bilgisayar için uygun, ya da belki de bir bilgin için.
Choon el kitabından:
Transpositions
Yukarı (
+
), aşağı (-
) ve iptal (.
) olmak üzere üç aktarma talimatı vardır . Bir aktarım talimatı, oynanan son notun miktarına göre oynanan tüm notları aktarır. İptal talimatı (.
), aktarımı tekrar sıfıra ayarlar.Transpozisyonlar birikimlidir, bu nedenle Choon kodu gelecekteki notları 2'ye kadar çevirir
b+
ve 4 olurb++
. Ayrıca, kullanılan değer, aktarımların uygulanmasından sonra önceki notun değeridir, bu nedenleb+b+
gelecekteki notları 4'e değil 6'ya kadar çevirir.John Cage
John Cage talimatı (
%
) çıkış akışında bir nota sessizliğe neden olur. Bir John Cage'in aktarma değeri sıfırdır -%-
ve%+
op-op değildir (çıktıya tek bir sessizlik eklenmesi dışında).Barları tekrarla
Yinelenen Çubuklar talimatları (
||:
ve:||
) bir döngü içine alır. Döngü||:
karşılaşılmadan önce oynanan en son nota ile belirtilen sayıda çalışacaktır . Sıfır veya negatif bir değer, Choon'un eşleştirmeden oynamaya başlamak için hemen atlayacağı anlamına gelir:||
. Bir John Cage sonsuza dek tekrar etmek demektir -%||::||
sonsuz bir döngüdür.Tuning Çatal
Tuning Fork talimatı
~
döngülerden kurtulmak için bir yol sağlar. Bir ayar çatalı bir döngüde karşılaşılırsa ve oynanan son nota bir değerA
notuysa, Choon bir sonraki:||
komuttan sonra oynamaya başlamak için hemen atlayacaktır . Başka bir:||
talimat yoksa (anlamı~
herhangi bir yineleme çubuğunun dışında kullanılmışsa), performans derhal sonlandırılır.İşaretleyiciler
Markerler, muhteşem programlama kolaylığı sağlar. Bir işaretleyici, çıkış akışındaki bir noktayı hatırlayan küçük harf veya kelimedir. Bir işarete atıfta bulunmak (aşağıya bakınız), İşaretçi oluştuktan sonra çalınan notun tekrar çalınmasına neden olur. Yerleşimlerin bu yeni oynanan notu etkileyeceğini unutmayın.
İki veya daha fazla markörün sırayla ortaya çıktığı veya bir markörün bir marker-play talimatını takip etmesi durumunda, bunlar boşlukla ayrılmalıdır.
Çıkıştan Oynat
Çıkıştan Çalma talimatı (
=
) çıkış akışında daha önce çalınan notaları tekrar çalmanıza izin verir. Notlara numaradan başvurabilirsiniz - program başladıktan sonra oynanan 5. not=5
, göreceli sayıya göre - oynanan en son 3. not=-3
ya da işaretleyici tarafından - işaretleyiciden sonra oynanan notx
olacaktır=x
.Bu normal bir deyim bir işaretçi yeniden kullanmak ve hemen sonra böyle, buna bakmaya geçerli:
x=x
. Bu,x=x+y
geleneksel bir programlama dilinde (y
şu anda etkin aktarım değerini temsil ettiği yerde) söylemeye benzer .
Bir John Cage sadece bir dinlenme , bir Tuning Fork (kabaca) dal segno ve bir marker bir segno. Sanırım ayar çatalı birincil oyuncunun cevap verdiği ilave bir oyuncu tarafından çalınabilir, ancak prensip aynı.
Bütünlüğü tamamlamak, en azından üç şey gerektirir: sonsuz bir döngü, koşullu bir sıçrama (eğer öyleyse) ve hesaplamaların sonuçlarını bellekte saklamak için bir yol. Müzik notasyonu şartlı atlayışlara sahip olsa bile, durumu yoktur, yani hayır, Turing-tamamlanmadı.
Turing'in eksiksiz olduğu bir dilin standart kanıtı, bu dilde bir Turing makinesi yazmaktır. Bu, dil (genellikle dilin alt kümesi) ile Turing makinesi arasında bir denklik olduğunu kanıtlar.
"Müzik Notasyonu" kavramı biraz kaygandır. Kullanılan çok sayıda standart gravür vardır. Ancak. Her türlü çılgınca şeyi kağıda yazan, zar zorlayan besteciler var.
Finale ya da Sibelius'un ya da bazı ana akım gravür araçlarının bir parçası olacak kadar standart kabul edilen müzikal notasyon alt grubuna odaklanmak istediğinizi varsayalım.
Yani.
Python için (veya C veya her neyse) sembolleri, kaseti, geçiş kurallarını ve kaseti durum değişikliği ve kaset hareketini yansıtacak şekilde bantı güncelleyen çeşitli kaset hareketlerini tanımlayın, kasetteki simgeleri okuyarak yazın.
"Müzik Notasyonu" nu kullanarak, sembolleri ve durumlu bandı, geçiş kurallarını ve bandı güncelleyen çeşitli eylemleri tanımlamamız gerekir.
Bizim eksik olduğumuz, kasetli bir kaset ve müzisyenlere kasetteki sembollere nasıl cevap vereceğini ve kaseti nasıl güncelleyeceğini söyleyen kurallar.
Bir anlamda, havada dolaşan sesler durum bilgisi olan bant olabilir. Fakat. Kaseti geri sarmanın kolay yolu yok. Bu geri sarma eksikliği, sanatçının bir tür özel "kaset" tutması gerektiği anlamına gelir.
Bu, müzik notasının dışına ve sanatçıya yapılan diğer ekstra müzikal talimatlara girer.
Notasyonun çoğu yorumlamaya açıktır ve doğal dil talimatları müzik notasyonunun kabul edilen bir yönüdür - ve Batı noter müziğinin tarihi olmasa da çoğu boyunca olmuştur.
Fermatalar tanımı gereği, müziğin dış etkenlerle bağlantılı olarak hemen hemen değiştirdiği kendi durumlarına bağlı olacağı anlamına gelen sanatçının takdirine bağlıdır - bu, müzikal gösterimin vatansız doğası hakkında bazı sorulara yol açar.
Bach'ın Müzikal Teklifi'nden Tonus başına Canon 2 , tonalitesi parça çalındığı sürece her seferinde bir adım adım yükselen sonsuz döngülü bir parçadır.
Daha yakın bir zamanda, örneğin Dave Brubeck'in Take Five gibi Jazz eserlerinin not edilmiş versiyonlarında "her solist için tekrarla" gibi talimatlar görmek yaygındır .
Bununla birlikte, fermata gibi doğası gereği keyfi yönlerin yanı sıra, diğer cevapların ifade ettiği gibi, genel sembollerden başka hiçbir şeyle müzikal gösterim yapılmadığı söylenebilir.
Açıklayıcı bir dil olduğu için tam dilleri Turing ile ilgili değildir. Açıklamanın kendisinin sonucu dışında hesaplama ya da veri değiştirmeyle ilgili hiçbir komut yok, durum yok, girdi yok, çıktı yok.
Ayrıca girişe bağlı olarak koşullu atlama yoktur. Tüm sıçramaları çözdüğünüzde, bir ağaç değil doğrusal bir yapı elde edersiniz. Dolayısıyla, bu dilin modellenebileceği tüm "programlar", herhangi bir döngü veya sıçrama olmadan doğrusaldır.