/** ?- find_minima_and_maxima([-,-,+,+,-,-],[C,B,A,B,C,B,A],M). M = [C, A, C, A] ; No ?- find_minima_and_maxima([-,-,+,+],[C,B,A,B,C],M). M = [C, A, C] ; No **/ find_minima_and_maxima([Change1|Changes],[Note1,Note2|Music1],Music2) :- find_minima_and_maxima1(Change1,Note2,Changes,Music1,[Note1],Music2). find_minima_and_maxima1(_,Note1,[],[],Music1,Music2) :- append(Music1,[Note1],Music2). find_minima_and_maxima1(Change1,_,[Change1|Changes],[Note1|Music1],Music2,Music3) :- find_minima_and_maxima1(Change1,Note1,Changes,Music1,Music2,Music3). find_minima_and_maxima1(Change1,Note1,[Change2|Changes],[Note2|Music1],Music2,Music3) :- not(Change1=Change2), append(Music2,[Note1],Music4), find_minima_and_maxima1(Change2,Note2,Changes,Music1,Music4,Music3).