L’output è troncato con # -segni nel REPL

Ho scritto una funzione che funziona come previsto ma non capisco perché l’output sia così.

Funzione:

datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop; (* XOR = (A And Not B) OR (Not A Or B) *) local fun do_xor (alpha,beta) = Or( And( alpha, Not(beta) ), Or(Not(alpha), beta)) in fun xor (alpha,beta) = do_xor(alpha,beta); end; 

Test:

 val result = xor(Atom "a",Atom "b"); 

Produzione:

 val result = Or (And (Atom #,Not #),Or (Not #,Atom #)) : prop 

Questa è solo una restrizione di output (sì, è confusa) – per impostazione predefinita la profondità di stampa del valore nel livello superiore (shell intertriggers) è limitata a un numero piuttosto piccolo (ad esempio 5). Le parti saltate sono stampate con #.

Puoi sovrascrivere questa profondità – almeno, in SML-NJ – con la variabile printDepth:

 Control.Print.printDepth := 1024; 

PS A proposito, non hai bisogno di un do_xor separato e di una funzione locale qui – solo

 fun xor(alpha, beta) = Or(...); 

andrà bene.