Как получить доступ к библиотеке в Poly/ML в Windows?

Я установил Poly/ML из установщика "PolyML5.6-64bit.msi"; Я могу запустить REPL, щелкнув его в меню "Пуск"; но я не знаю, как получить доступ к библиотекам из него? Я пытался делать use "something", но это приводит к ошибке, как показано ниже:

> use "Math";
Exception-
   Io
     {cause = SysErr ("No such file or directory", SOME ENOENT), function =
      "TextIO.openIn", name = "Math"} raised

Аналогично для use "Basis" или же use "Windows",

Обратите внимание, что я новичок в SML; Я, кажется, нашел use команда в каком-то общем учебнике по SML, не знаю, правильно ли я ее использую:/

edit: Кроме того, целевой каталог установки, кажется, содержит только следующие три двоичных файла, не уверенный, должны ли там быть некоторые источники, или нет:

C:\Program Files\Poly ML>dir
 Volume in drive C is Windows
 Volume Serial Number is CENS-ORED

 Directory of C:\Program Files\Poly ML

26.02.2016  00:03    <DIR>          .
26.02.2016  00:03    <DIR>          ..
25.01.2016  14:22           681 472 PolyLib.dll
25.01.2016  14:23         8 182 784 PolyML.exe
25.01.2016  14:22            20 480 PolyPerf.dll
               3 File(s)      8 884 736 bytes

edit2: Хммм... из некоторого дальнейшего просмотра, я начинаю думать, что очевидно, что Poly/ML используется большинством людей исключительно из "Изабель IDE"? так что, возможно, если я установлю этот, все будет работать из коробки? Я постараюсь, но оригинальный вопрос пока остается открытым.

edit3: Uhhh, Изабель IDE странно, в частности, не знаю, как "запустить" файл SML, открытый в нем в любом случае:/ вероятно, собирается удалить (т.е. удалить?) его в этой ситуации, также учитывая тот факт, что я получил ответ к первоначальному вопросу уже сейчас.

1 ответ

Решение

Я использую Poly/ML на Linux, а не Windows. Но я почти уверен, что то, что следует, также верно для Windows.

Вам не нужно использовать use функция для загрузки модулей библиотеки баз, которые уже находятся в среде верхнего уровня, когда вы запускаете Poly/ML REPL. Например:

lolcathost% poly
Poly/ML 5.6 Release
> structure M = Math;
structure M: MATH
> M.pi;
val it = 3.141592654: real
> 

Вы используете use функция для загрузки собственного кода. Аргумент должен быть либо абсолютным путем, либо путем относительно текущего рабочего каталога. Я понятия не имею, возможно ли изменить текущий рабочий каталог в REPL. Проверьте здесь, чтобы увидеть, как изменить текущий рабочий каталог, если вам это нужно.

Кроме того, для более крупных проектов вы можете использовать систему сборки Poly/ML, а не use,


В ответ на ваш комментарий:

Модуль PolyML.Compiler предоставляет функции для извлечения имен существующих значений, типов, сигнатур, структур и функторов в среде верхнего уровня.

Однако одни только имена не очень полезны. Вот несколько хитростей, чтобы получить REPL, чтобы рассказать вам больше.

Типы: скажем, вы хотите знать, что конструкторы list являются.

> datatype foo = datatype list;
datatype 'a foo = :: of 'a * 'a foo | nil
> 

Или как тип синоним StringCvt.reader определено.

> datatype foo = datatype StringCvt.reader;
type ('a, 'b) foo = 'b -> ('a * 'b) option
> 

Конечно, если вы используете этот прием для абстрактного типа данных, вы не получите много информации:

> datatype foo = datatype string;
eqtype foo
> 

Структуры: допустим, вы хотите знать, что представляют собой значения и типы компонентов структуры Byte являются.

> structure Foo = struct open Byte end;
structure Foo:
  sig
    val byteToChar: Word8.word -> char
    val bytesToString: Word8Vector.vector -> string
    val charToByte: char -> Word8.word
    val packString: Word8Array.array * int * substring -> unit
    val stringToBytes: string -> Word8Vector.vector
    val unpackString: Word8ArraySlice.slice -> string
    val unpackStringVec: Word8VectorSlice.slice -> string
  end
> 

Подписи: скажем, вы хотите знать, что такое значение и тип компонентов подписи BYTE являются.

> functor Foo (X : BYTE) = struct open X end;
functor Foo (X: BYTE): 
  sig
    val byteToChar: Word8.word -> char
    val bytesToString: Word8Vector.vector -> string
    val charToByte: char -> Word8.word
    val packString: Word8Array.array * int * substring -> unit
    val stringToBytes: string -> Word8Vector.vector
    val unpackString: Word8ArraySlice.slice -> string
    val unpackStringVec: Word8VectorSlice.slice -> string
  end
> 
Другие вопросы по тегам