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