Я пытаюсь использовать пролог для разработки простой DCG для музыкального контекста.
Я определил музыкальные ноты следующим образом:
note(ton) --> [a];[d];[f].
note(sup) --> [b];[e];[g].
etc.
'ton' и 'Приведенные выше аргументы относятся к тому аккорду, к которому принадлежит нота.Ноты a, d и f относятся к аккорду * ton * ic, а ноты b, e и g - к эртоническому аккорду * sup * (в ключеРе мажор).
Теперь я хочу ввести еще один символ «ноты», который принимает два аргумента - один для аккорда и один для длительности ноты.Например,
note(X,q) --> note(X),[2].
Моя проблема заключается в том, что примечание (X), [2] является списком [a, 2].Мне нужно это в форме [a2].
Можно обойти эту проблему, не используя переменную X:
note(ton) --> [a];[d];[f].
note(ton,q) --> [a2];[d2];[f2].
Но так как есть семь разных аккордов и семь разныхдлины примечаний в моем представлении, это может включать много ненужного (я думаю) кода.
Я не уверен, как объединить примечание (X) и целое число 2, и я также не уверен, где это должнобыть сделаноМожно ли объединить вещи в правой части правила перезаписи?
Спасибо,
Шон