Как я могу настроить интерактивный цикл SML / NJ? - PullRequest
3 голосов
/ 12 апреля 2009

Я новичок в Standard ML и пытаюсь разобраться в среде выполнения SML / NJ. Я хочу адаптировать его к своим потребностям. В частности, я хочу:

  • Использовать IntInf по умолчанию
  • Запретить усечение строк и IntInf до 70 символов.

Вот что я нашел в своих 8+ часах, читая документацию и экспериментируя.

Я могу перегрузить IntInf поверх int с помощью команды

open IntInf;

Я могу контролировать, сколько символов в строке отображается с помощью переменной Control.Print.stringDepth. Например, это позволит отображать 1000 символов перед усечением:

Control.Print.stringDepth := 1000;

Как мне сделать то же самое для значений IntInf? Могу ли я установить глубину на бесконечность (то есть вообще не обрезать)?

Является ли открытие IntInf лучшим способом перегрузки int с помощью IntInf?

Наконец, как заставить все это загружаться автоматически во время выполнения, чтобы при вызове «sml» оно находилось в моей среде по умолчанию?


Edit: с тех пор я узнал, что есть опция Control.Print.intinfDepth, для которой можно задать большое число (скажем, 999999) Я не знаю, как сделать его бесконечным.

Другие мои вопросы остаются без ответа.


Редактировать: я наткнулся на этот набор настроек SML / NJ для класса в штате Канзас . Чтобы отобразить собственное баннерное сообщение и избежать отображения «val it = true: bool», мне нужно проверить возвращаемое значение SMLofNJ.exportML. Если это так, образ кучи был только что восстановлен (т.е. запущен), и я могу отобразить сообщение. Если значение равно false, изображение кучи было просто сохранено.

Ответы [ 2 ]

3 голосов
/ 02 мая 2009

Как сделать так, чтобы все это автоматически загружалось во время выполнения, чтобы при вызове «sml» оно находилось в моей среде по умолчанию?

Вам необходимо создать образ кучи , который будет запускаться сценарием sml, на который вы затем можете символически ссылаться. Чтобы избежать осложнений при начальной загрузке, я обычно называю свое изображение кучи другим именем; например; sml-nw для SML / NJ с поддержкой noweb .

Основной примитив, необходимый для создания образа кучи, - SMLofNJ.exportML. Вот как вы это используете:

  1. Настройте все так, как вы хотите, например, open IntInf и настройте все свои Control.Print переменные. (Вы можете попробовать установить Control.Print things to valOf Int.maxInt`, который ближе всего к бесконечности.)

  2. Создать новое изображение кучи с помощью SMLofNJ.exportML "mysml". Когда вы запустите свою настроенную версию, вы начнете сразу после звонка на exportML. Прочитайте документацию . Тренировка; Есть много способов использовать этот примитив.

  3. Скопируйте образ кучи (возможно, mysml.x86-linux) в установочный каталог для образов кучи (в моей установке /usr/lib/smlnj/bin/.heap, но вы, конечно, можете следовать подсказкам в сценарии sml)

  4. Создайте сценарий mysml, который является символической ссылкой на сценарий sml.

В старые времена этого было достаточно, но я не использую SML / NJ уже несколько лет. Я также нашел несколько устаревший пример в Интернете.

0 голосов
/ 13 апреля 2009

Помогает ли это?

http://archives.devshed.com/forums/programming-132/big-integers-in-sml-nj-97t-316791.html

Не уверен насчет бесконечного вопроса.

...