/** output from energy.pl gives notes for local minima and maxima 878 -+ 87678 --++ **/ changes_to_music(Changes,Music) :- changes_to_music1(Changes,[],d,Music1), find_minima_and_maxima(Changes,Music1,Music). changes_to_music1([],Music,Music1,Music2) :- append(Music,[Music1],Music2). changes_to_music1([+|Changes],Music1,Music2,Music3) :- music(_,Music2,Music4), changes_to_music2(Music1,Music2,Changes,Music4,Music3). changes_to_music1([-|Changes],Music1,Music2,Music3) :- music(Music4,Music2,_), changes_to_music2(Music1,Music2,Changes,Music4,Music3). changes_to_music2(Music1,Music2,Changes,Music3,Music4) :- append(Music1,[Music2],Music5), changes_to_music1(Changes,Music5,Music3,Music4). music(t,d,r). music(d,r,m). music(r,m,f). music(m,f,s). music(f,s,l). music(s,l,t). music(l,t,d). find_minima_and_maxima([Change1|Changes],[Note1,Note2|Music1],Music2) :- find_minima_and_maxima1(Changes,Music1,Change1,Note2,[Note1],Music2). find_minima_and_maxima1([],[],_,Note1,Music1,Music2) :- append(Music1,[Note1],Music2). find_minima_and_maxima1([Change1|Changes],[Note1|Music1],Change1,_,Music2,Music3) :- find_minima_and_maxima1(Changes,Music1,Change1,Note1,Music2,Music3). find_minima_and_maxima1([Change1|Changes],[Note1|Music1],Change2,Note2,Music2,Music3) :- not(Change1=Change2), append(Music2,[Note2],Music4), find_minima_and_maxima1(Changes,Music1,Change1,Note1,Music4,Music3).