2010-12-17 9 views
3

Ich habe diesen Schnipsel des Codes in ML:polymorphe Listen in ML

local 

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

in 

fun flat list = unfolder(list, 1) 

end; 

es mir einen Fehler gibt:

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 

aber wenn ich its (n, l) to (n, l:int) ändere es funktioniert, und wenn zu (n, l:'a), kann jemand bitte erklären, warum polymorphe Art nicht funktioniert, danke im Voraus

Antwort

2

Es ist ein interner Fehler in SML/NJ. Das Programm funktioniert fehlerfrei, wenn mit MLton kompiliert wird, und fügt hinzu:

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 

Melden Sie es. Ihr Beispiel scheint in der Größe verdaulich zu sein - und hat wahrscheinlich mit der Darstellung von Polymorphismen zu tun.