полиморфные списки в ML - PullRequest
       2

полиморфные списки в ML

3 голосов
/ 17 декабря 2010

У меня есть этот фрагмент кода в ML:

local

fun unfolder( [] , n ) = []
    | unfolder( l::ls, n ) = (n, l) :: unfolder( ls, n )

in

fun flat list = unfolder(list, 1)  

end;

выдает ошибку:

unexpected exception (bug?) in SML/NJ: EA [EA]
  raised at: ../../MLRISC/x86/mltree/x86.sml:417.32-417.34
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/TopLevel/interact/evalloop.sml:44.55

но когда я изменяю its (n, l) to (n, l:int), он работает, а когда на (n, l:'a), может кто-нибудь объяснить, почему полиморфный тип не работает, заранее спасибо

1 Ответ

2 голосов
/ 17 декабря 2010

Это внутренняя ошибка в SML / NJ. Программа работает без сбоев, если скомпилирована с MLton, добавив:

val _ =
  let val l = flat [1,2,3]
      fun printer (a,b) = Int.toString(a) ^ ", " ^ Int.toString(b)
  in
    print (printer (hd l) ^ "\n")
  end

Сообщить об этом. Ваш пример кажется удобочитаемым по размеру - и, вероятно, имеет отношение к представлению полиморфизма.

...