2016-04-08 6 views
0

Существует ли какая-либо функция, которая непосредственно печатает список int? Мне нужно распечатать список int для целей отладки. Я знаю, что могу добиться этого, написав свои собственные функции, но я хочу знать, что есть ли другой доступный метод?Печать списка int в sml

ответ

0

SML/NJ не имеет столько возможностей для симпатичной печати, как некоторые другие реализаций SML, но его PRINTCONTROL signature дает некоторую гибкость.

Например, с настройками по умолчанию у вас есть это:

enter image description here

Но если в REPL вы оцениваете

Control.Print.printLength := 500; 

и

Control.Print.linewidth := 80; 

затем:

enter image description here

0

Нет, нет встроенного способа печати чего-либо, кроме строк в SML. Вы либо пишете свои собственные утилиты, либо разбиваете свои функции на более мелкие компоненты, которые могут быть протестированы отдельно в REPL, а затем вы получите автоматическую красивую печать возвращаемого значения.

Если вы хотите создать свои собственные утилиты, в викторине MLton есть страница, описывающая, как построить небольшую библиотеку комбинаторов для печати большинства встроенных типов: http://mlton.org/TypeIndexedValues#_signature.

Для списков, они попадают в точку, где вы можете написать:

val "[3, 1, 4]" = 
    let open Show in show (list int) end [3, 1, 4] 
1

В Poly/ML имеется специальная функция PolyML.print, которая будет печатать большинство значений, используя соответствующую функцию для печати. Это не часть стандартного ML, поэтому он находится в структуре PolyML. Возможно, вам придется использовать ограничение типа, если функция может быть полиморфной.

> fun f (x: int list) = (PolyML.print x;()); 
val f = fn: int list -> unit 
> f [1,2,3,4]; 
[1, 2, 3, 4] 
val it =(): unit 

Вы можете получить более полную информацию об отладке в Poly/ML с помощью отладчика. См. http://www.polyml.org/documentation/Tutorials/Debugging.html.

Смежные вопросы