model triBullesParametre // passage d'une fonction en parametre function sort input Real[:] unsorted; input ComparePredicate compare; output Real[size(unsorted,1)] sorted; partial function ComparePredicate // signature du predicat de comparaison input Real x; input Real y; output Boolean comp; end ComparePredicate; protected Real t; algorithm // non optimise sorted := unsorted; for i in 1:size(unsorted,1) loop for j in 1:size(unsorted,1) loop if not compare(sorted[i], sorted[j]) then t := sorted[i]; sorted[i] := sorted[j]; sorted[j] := t; end if; end for; end for; end sort; // 1er predicat ; definition dans les regles de l'art = sous-classe de ComparePredicate function greaterThan extends sort.ComparePredicate; algorithm comp := x>y; end greaterThan; // 2ème predicat ; en fait, meme pas besoin d'etre explicitement sous-classe de ComparePredicate // Il suffit que les noms et les types des parametres exploites coincident function lessThan input Real x; input Real y; output Boolean comp = x