% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % SIMPLE DATA % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % tryksvag( Teksttryk ) % ===================== tryksvag(1). tryksvag(2). tryksvag(3). % trykstaerk( Teksttryk ) % ======================= trykstaerk(4). trykstaerk(5). trykstaerk(6). % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % METRUM % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % metrumIVersrytme( Metrum ) % ========================== metrumIVersrytme( [8,4,2,1] ). % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % STANDARDRYTME % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % standardrytme( Rytme ) % ====================== % Rytme er en standardrytme. standardrytme( [T|R] ) :- standardtone( T ), standardrytme( R ). standardrytme( [] ). % standardtonelaengde( Længde ) % ============================= % Længde er en standardtonelængde. standardtonelaengde( 1 ). standardtonelaengde( 2 ). % standardtone( Tone ) % ==================== % Tone er en standardtone. standardtone( tone(Teksttryk,Position,Laengde) ) :- trykstaerk( Teksttryk ), Position mod 2 =:= 0, standardtonelaengde( Laengde ). standardtone( tone(Teksttryk,Position,Laengde) ) :- trykstaerk( Teksttryk ), Position mod 4 =:= 3, standardtonelaengde( Laengde ). standardtone( tone(Teksttryk,Position,Laengde) ) :- tryksvag( Teksttryk ), Position mod 4 =:= 1, standardtonelaengde( Laengde ). standardtone( tone(Teksttryk,Position,Laengde) ) :- tryksvag( Teksttryk ), Position mod 4 =:= 2, standardtonelaengde( Laengde ). standardtone( tone(Teksttryk,Position,1) ) :- tryksvag( Teksttryk ), Position mod 4 =:= 3. % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % POLYRYTME % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ polyrytme( [tone(T1,Startposition,1), tone(T2,_,1), tone(T3,_,1)] ) :- trykstaerk( T1 ), tryksvag( T2 ), tryksvag( T3 ), Startposition mod 8 =:= 3. % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % VERSRYTME % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % erSammenstykketAf( Liste, Del1 , Del2 ) % erSammenstykketAf( Liste, Del1 , Del2, Del3 ) % ============================================= % Liste er sammenstykket af Del1 og Del2 (og evt. Del3). erSammenstykketAf( Liste, [] , Liste ). erSammenstykketAf( [Element|Liste], [Element|Del1] , Del2 ) :- erSammenstykketAf( Liste, Del1, Del2 ). erSammenstykketAf( Liste, [] , Del1, Del2 ):- erSammenstykketAf( Liste, Del1, Del2 ). erSammenstykketAf( [Element|Liste], [Element|Del1] , Del2, Del3 ) :- erSammenstykketAf( Liste, Del1, Del2, Del3 ). % versrytme( Rytme ) % ================== versrytme( Rytme ) :- metrumIVersrytme(Metrum), rytmeMedStartIFoerstePeriode(Rytme, Metrum), delrytme( Rytme ). % delrytme( Rytme ) % ================= delrytme( [T|R] ) :- standardtone( T ), delrytme( R ). delrytme( PogR ) :- erSammenstykketAf( PogR, P, R ), polyrytme( P ), delrytme( R ). delrytme( [] ). % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % VERSRYTME MED SAMME TEKSTRYTME % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % versrytmeMedTekstrytmen( Rytme , Tekstrytme ) % ============================================= % Rytme er en versrytme med samme tekstrytme som Tekstrytme. versrytmeMedTekstrytmen(Rytme, Tekstrytme):- harTekstrytmen(Rytme,Tekstrytme), versrytme(Rytme).