Это всего лишь пример. Эти две функции связаны. Вы действительно хотите позвонить тому, кого назвали самым низким. Затем он должен вернуть наименьшее число из двух. Это, конечно, не сработает, потому что во время компиляции функции reducemax вы делаете вызов неопределенной в то время функции, называемой наименьшей.
fun reducemax (i:int * int):int =
if (#1 i) > (#2 i)
then lowest(((#1 i)-1), (#2 i))
else lowest((#1 i), ((#2 i)-1));
fun lowest (i:int * int):int =
if (#1 i) = (#2 i)
then (#1 i)
else reducemax((#1 i), (#2 i));
Я знаю, что могу использовать let, чтобы объявить функцию reducemax внутри самого низкого уровня, но есть ли способ обойти это? Например, как и в C, объявите функцию, не определяя ее. Я понимаю, что функция reducemax должна знать, что самый низкий вернет int и примет аргумент int * int.