我正在尝试使用 prolog 为音乐环境开发一个简单的 DCG。
我通过以下方式定义了音符:
note(ton) --> [a];[d];[f].
note(sup) --> [b];[e];[g].
etc.
上面的“ton”和“sup”参数与音符所属的和弦有关。音符 a、d 和 f 属于 * ton *ic 和弦,音符 b、e 和 g 属于 * sup *ertonic 和弦(在 D 大调中)。
现在,我想介绍一个进一步的“音符”符号,它有两个参数——一个用于和弦,一个用于音符持续时间。例如,
note(X,q) --> note(X),[2].
我的问题在于 note(X),[2] 是一个列表 [a,2]。我需要它的形式 [a2]。
不使用变量 X 可以解决这个问题:
note(ton) --> [a];[d];[f].
note(ton,q) --> [a2];[d2];[f2].
但是由于我的表示中有七个不同的和弦和七个不同的音符长度,这将涉及很多不必要的(我认为)代码。
我不确定如何连接 note(X) 和整数 2,我也不确定应该在哪里完成。是否可以在重写规则的右侧连接事物?
谢谢,
肖恩