2
我正在尝试使用prolog为音乐环境开发一个简单的DCG。在DCG中连接类型
我在这样定义的音符:
note(ton) --> [a];[d];[f].
note(sup) --> [b];[e];[g].
etc.
的“吨”以上“SUP”参数是指其和弦的音符属于。的音符,d和f属于*吨 * IC弦和音符B,E,和g属于* SUP * ertonic和弦(在d大调)。
现在,我想介绍一个另外的'note'符号,它带有两个参数 - 一个用于和弦,另一个用于音符持续时间。例如,
note(X,q) --> note(X),[2].
我的问题在于note(X),[2]是列表[a,2]。 我需要它的形式[a2]。
有可能通过不使用变量X来解决这个问题:
note(ton) --> [a];[d];[f].
note(ton,q) --> [a2];[d2];[f2].
但由于有七个不同的和弦,在我的代表七个不同的音符长度,这将涉及到很多不必要的(我认为)代码。
我不确定如何连接说明(X)和整数2,并且我也不能确定哪里应该这样做。是否有可能连接重写规则右侧的东西?
感谢,
肖恩
非常感谢您的回应。这正是我正在寻找的。但是,目前我只能通过加载我的语法并从?提示符运行您的建议代码来获得正确的响应。 我想知道我怎么能实现同样的事情在语法中,这样一记可以表示为一个或A2 ...... 对不起,如果这还不清楚。 – 2012-03-07 13:48:08
所以你想要一个新的语法生产,调用注释? note(X,q) - > {phrase(note(X),ListOut),atomic_list_concat(ListOut,Atom)},[Atom]。 – DaveEdelstein 2012-03-08 12:25:41
或创建一个新的语法规则note_q(X) - > {phrase(note(X),ListOut),atomic_list_concat(ListOut,Atom)},[Atom]。对不起,如果我不说明你应该*做什么,只是你可以做什么。 – DaveEdelstein 2012-03-08 12:27:13