SML как изрично да зададете тип параметър на функция на IntInf

Опитвам се да направя функция за сортиране за уникални големи числа в SML, но компилаторът продължава да задава моя тип функция на int вместо 'a. Как мога изрично да кажа на компилатора да използва IntInf?

Ето моят код:

fun selectsort([a]) = [a]
  | selectsort(h::t) =
  if (hd(selectsort(t))) < h then hd(selectsort(t))::h::tl(selectsort(t))
  else h::selectsort(t);

когато опитам

fun selectsort([a]) = [a]
  | selectsort(l : IntInf list) =
  if (hd(selectsort(tl(l)))) < hd(l) then hd(selectsort(tl(l)))::h::tl(selectsort(tl(l)))
  else hd(l)::selectsort(tl(l));

продължава да ми дава "Грешка: необвързан тип конструктор: IntInf"


person Jean-Luc Nacif Coelho    schedule 07.12.2014    source източник
comment
Решено чрез заобиколно решение: if (hd(selectsort(t)) + IntInf.fromInt(0)) < h + IntInf.fromInt(0) then hd(selectsort(t))::h::tl(selectsort(t))   -  person Jean-Luc Nacif Coelho    schedule 07.12.2014


Отговори (1)


IntInf е името на модул, типът се нарича IntInf.int. Уви, вашият код е малко опростен:

fun selectsort([a]) = [a]
  | selectsort(x::y::t : IntInf.int list) =
    if y < x then y::x::selectsort(t) else x::selectsort(y::t)

Имайте предвид обаче, че IntInf е незадължителен модул, който не е наличен за всички реализации. (Освен това трябва да добавите регистър за празния списък.)

person Andreas Rossberg    schedule 07.12.2014
comment
Направих това за много специфичен код, така че празните списъци няма да бъдат сортирани. - person Jean-Luc Nacif Coelho; 08.12.2014
comment
@Jean-LucNacifCoelho, счита се за добър стил да добавите липсващи случаи така или иначе и да ги направите напр. повдигнете Domain изключение. - person Andreas Rossberg; 08.12.2014