A predikátum (List.filter első argumentuma) éppen ezt fogalmazza meg: ha az elem true, eldobja, ha false (pontosabban bármi más, vö. _ => true, de most csak true lehet), akkor kigyűjti.
A pontosság kedvéért: a List.filter első argumentumaként nem egy feltételt, azaz egy bool típusú kifejezést, hanem egy predikátumot, azaz egy bool típusú eredményt adó függvényt vár.
Helyette a Real.== vagy a Real.?= függvény használható. Pl.
Most már az is érthető, hogy politípusú értékek egyenlőségvizsgálatakor miért figyelmeztet az smlnj: előfordulhat, hogy a létrehozott függvény a későbbiekben olyan értékek egyenlőségét akarja megvizsgálni, amelyekre az egyenlőségvizsgálat nem végezhető el.
Az mosml-ben a Real.== ekvivalens az = operátorral, ha az utóbbi operandusai real típusúak, a Real.?= eredménye pedig mindig false, mert az IEEE standard szerinti számábrázolások az mosml-ből hiányoznak.
Hangsúlyozom, hogy az SML-ben az if... then... else: kifejezés, mégpedig egy feltételtől függően így vagy úgy kiértékelendő kifejezés. Ha az else ágban nincs rekurzív hívás, az esetleges műveletek elvégzése után a függvény kiértékelése is befejeződik, azaz az SML visszatér a függvényhívásból.
A kérdező folytatja: Ha van több lehetőség is, melyik mit jelent pontosan ?
Oktató: Ezt nem értem: ha az if... then... else... if...else ... szerkezetre gondol, akkor a kiértékelés mindig az if után álló predikátumtól függ. Ha a függvény klózaira gondol, akkor pedig a függvényfejben megadott mintáktól.
Figyelem: mind a then és else-ágakban, mind a függvény klózaiban álló kifejezések függetlenek egymástól!
A kérdező folytatja: Valójában a belső függvényből való kilépéssel együtt a külső függvényt is be szeretném fejezni, és a belsőből való kilépésig kiszámított eredményeket visszadni. Remélem, nagyjából követhető volt a probléma leírása, és van ötletetek a megoldására.
Oktató: Ennek semmi akadálya: ha a belső függvény visszatérési értékével egyúttal az őt meghívó függvényből is kilép, akkor a külső függvény által visszaadott érték meg fog egyezni a belső függvény által visszaadott értékkel (a belső függvény visszatérési értékével).
Abból, amit leírt, azért nem nagyon értem, hogy mi a problémája. Ha esetleg arra gondol, hogy valamilyen return v vagy exit if parancs van-e az SML-ben, akkor erre nem a válasz, mert nincs rájuk szükség. Ha megnézi az előadásokon bemutatott példákat, sok mintát talál.