音乐符号图灵完成了吗?


63

我想知道音乐符号语言是图灵完成吗?

我的第一个想法是乐谱中存在循环,但是无法编写条件分支,对吗?

我不是音乐家,所以也许有人可以帮忙填补空白?


7
什么是音乐分区语言?某种形式的音乐符号
gnat 2012年

4
我对音乐符号了解不多:您能以某种方式编码无穷数量的“可变变量”(或“磁带”)吗?否则,我看不到如何完成。
nikie 2012年

不,不是这样
shabunc 2012年

@nikie我不确定是不是克制了存储功能或类似功能……
Klaim 2012年

2
当然,它是图灵完备的,只需使用8个不同的音符来表示Brainfuck的8个字符。:)
克里斯·伯特·布朗

Answers:


37

是的,如果您接受了一些换位说明,虽然不常见但并不陌生。

然后,您可以将作品解释为Choon,这是图灵完成的。演奏者是记忆:他们必须记住乐曲当前所转换的音符数量,以及迄今为止演奏的所有音符。显然,这仅适用于计算机或智能设备。

从Choon手册中:

  • 换位

    共有三个变调指令,上移(+),下移(-)和取消(.)。移调指令将所有后续演奏的音符与最后演奏的音符数量进行移调。取消指令(.)将移调设置回零。

    换位是累积的,因此将将来的音符加2的Choon代码是b+,将4变位是b++。另外,所使用的值是应用b+b+移调后的前一个音符的值,因此将将来的音符向上移6而不是4。

  • 约翰·凯奇

    John Cage指令(%)在输出流中引起一个音符静音。约翰凯奇(John Cage)的换位值为零- %-并且%+是无操作(除非将单个静默添加到输出中)。

  • 重复条

    重复条指令(||::||)包含一个循环。循环将执行||:遇到之前最近演奏的音符指示的次数。零或负值表示Choon将立即从匹配处开始跳跃:||。约翰·凯奇(John Cage)意味着永远重复- %||::||是一个无限循环。

  • 音叉

    音叉指令~提供了一种打破循环的方法。如果在循环中遇到音叉,并且上次演奏的音符是value的音符A,那么Choon会立即从下一:||条指令之后跳转以开始演奏。如果没有其他:||说明(意味着~已在任何重复小节之外使用过),则演奏将立即终止。

  • 标记物

    标记提供了出色的编程便利。标记是记住输出流中某个点的小写字母或单词。引用标记(请参阅下文)将导致再次出现标记后播放的音符。请注意,移调将影响此新弹奏的音符。

    如果两个或多个标记顺序出现,或者标记遵循“从标记开始播放”指令,则必须用空格分隔它们。

  • 从输出播放

    从输出播放指令(=)使您可以再次播放在输出流中已经播放过的音符。您可以按编号来指代音符-自程序开始以来播放的第5个音符=5,按相对编号指的是最近播放的第3个音符=-3或按标记-记号之后播放的音符x=x

    重用标记并立即引用标记是一种常见的习惯,如下所示:x=x。这类似于x=x+y在常规编程语言中说(其中y表示当前有效的转置值)。

约翰·凯奇只是一个休息,一个音叉(大致)连续记号和标记是SEGNO。我想音叉可以由主要演奏者响应的其他演奏者演奏,但是原理是相同的。


1
我想说这是对这个问题的最好答案:没有其他答案可以证明音乐符号不是图灵完整的。
K.Steff

24

图灵完整性至少需要三件事:无限循环,条件跳转(如果-则为if)以及将计算结果存储到内存中某个位置的方法。即使音乐符号有条件的跳跃,它也没有状态,所以不,它不是图灵完备的。


13
它有条件跳跃,与重复符号结合使用:“在第一个重复上,扮演此角色,在第二个重复上,扮演该角色”。重复计数器(您在演奏时将其保持在头部)处于状态。但是它确实没有包含状态的无限磁带。
Jesper 2012年

49
有趣的事实:Lambda演算没有循环,没有条件跳转,也没有办法将计算结果存储在内存中的某个位置。然而,这已经完成了;-)
nikie 2012年

11
@Nikie:不要将抽象与现实混淆。Lambda演算具有条件求值的概念,递归用于循环和跳跃,并且状态被计算为求值表达式的结果。概念在那里。它们只是以与实际计算机编程完全不同的方式实现。
梅森惠勒

5
@MasonWheeler:LC没有循环,状态和条件的基本概念,但是您可以派生出具有类似目的的事物。这只是图灵完成的另一种说法。所以问题不在于:音乐符号是否具有这些概念,而是:您能以某种方式得出它们吗?您只是声称没有证据就不能。(我同意您的结论,我只是认为您的推理不正确。)
nikie 2012年

9
@MasonWheeler:Lambda演算真正的计算机编程。
dan_waterworth '02

23

要使图灵完整的语言的标准证明是用该语言编写图灵机。这证明了该语言(通常是该语言的子集)与图灵机之间存在对等关系。

“音乐符号”的概念有点滑。有很多使用的标准化雕刻。然而。有推动信封的作曲家将各种疯狂的东西写下来。

让我们假设您要专注于音乐符号的子集,该子集被认为足以作为Finale或Sibelius或某些主流雕刻工具集的一部分。

所以。

对于Python(或C或任何其他语言),您可以定义符号,磁带,过渡规则以及各种更新磁带的动作,以反映状态变化和磁带运动,在磁带上读写符号。

使用“音乐符号”,我们必须定义符号和有状态磁带,过渡规则以及更新磁带的各种动作。

我们所缺少的是有状态的磁带和规则,这些规则告诉音乐人如何对磁带上的符号做出反应以及如何更新磁带。

从某种意义上讲,空气中流淌的噪音可能是有状态的磁带。但。没有简单的方法来倒带。这种倒带的缺乏意味着表演者将不得不保留某种私人的“磁带”。

这超出了音乐符号的范围,并影响了表演者的其他一些音乐以外的指令。


好吧,您也不能真正倒带正在运行的程序...(但是,我明白您关于更新状态的意思,但是又可以成为一种功能语言吗?)
Izkata 2012年

2
您不倒带该程序。您倒带。关键是图灵磁带可以访问所有位置。它的“随机存取存储器”简化为具有向前和向后运动的线性时间。
S.Lott 2012年

哦,我现在记得了,对不起。我将“录音带”看作是出于某种原因写音乐的东西=)
Izkata 2012年

建造Turing机器是证明事物已经完成Turing的标准方法,但是事实并非如此-仅仅是因为您无法弄清楚如何构建Turing机器并不意味着某些事物没有Turing完成。图灵机(包括磁带和所有磁带)只是具有足够计算能力的任意抽象;没有磁带的概念,还有其他一些同样强大的抽象。看一看lambda演算,SKI演算或一些深奥的语言(Fractran很酷)。
迪洪·耶维斯

3

许多符号都可以进行解释,自然语言说明是音乐符号的一个公认方面-并贯穿于西方(甚至不是全部)西方音乐历史。

Fermatas的定义取决于表演者的判断力,这意味着它取决于他们自己的状态,这几乎总是受音乐与外部因素的影响而改变的,因此这引起了关于音乐符号的无状态本质的一些疑问。

从巴赫的音乐作品中选出的佳能a 2 per Tonus是无限循环的乐曲,只要演奏完成,其音调每次都会提高整步。

最近,在诸如Dave Brubeck的Take Take之类的爵士乐的注释版本中经常看到诸如“为每个独奏者重复”之类的指令。

也就是说,除了像费马这样的固有任意方面之外,正如其他答案所指出的那样,仅带有一般符号的乐谱可能不是图灵完整的。


1

它与图灵完整语言无关,因为它是描述性语言。除了描述本身的结果外,没有用于计算或修改数据的命令,没有状态,没有输入,没有输出。

根据输入,也没有条件跳转。解决所有跳跃时,您会得到线性结构,而不是树。因此,可以用这种语言建模的所有“程序”都是线性的,根本没有任何循环或跳跃。


1
您列出的内容对于图灵完整的语言不是必需的。Lambda演算仅具有应用程序,变量和Lambda(例如,没有循环,状态或命令),但Turing完整。一堆其他计算模型(例如SKI组合器)也是如此。
迪洪·杰维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.