Выходные данные усекаются с символами # в REPL - PullRequest
8 голосов
/ 26 декабря 2010

Я написал функцию, которая работает как положено, но я не понимаю, почему вывод такой.

Функция:

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;

Тест:

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

Выход:

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

1 Ответ

15 голосов
/ 26 декабря 2010

Это просто ограничение вывода (да, это сбивает с толку) - по умолчанию глубина распечаток значений в верхнем уровне (интерактивная оболочка) ограничена довольно небольшим числом (т. Е. 5). Пропущенные части печатаются с #.

Вы можете переопределить эту глубину - по крайней мере, в SML-NJ - с помощью переменной printDepth:

Control.Print.printDepth := 1024;

P.S. Кстати, вам здесь не нужна отдельная do_xor и локальная функция - просто

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

будет делать.

...