4

「PolyML5.6-64bit.msi」インストーラーから Poly/ML をインストールしました。[スタート] メニューで REPL をクリックすると、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 の初心者であることに注意してください。いくつかの一般的な SML チュートリアルでコマンドを見つけたようですが、use正しく使用しているかどうかはまったくわかりません:/

編集:また、ターゲット インストール ディレクトリには、次の 3 つのバイナリ ファイルのみが含まれているようです。そこにソースがあるかどうかは不明です。

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はほとんどの人が純粋にIsabelle IDE」内から使用しているように見えると思い始めていますか? たぶん、これをインストールすれば、すべてが箱から出して動作しますか? 試してみますが、元の質問は今のところ未解決のままです。

edit3:ええと、Isabelle IDE は奇妙です。具体的には、その中で開かれた SML ファイルを「実行」する方法がわかりません :/ おそらく、この状況ではそれをアンインストール (つまり、削除?) するつもりです。すでに元の質問に。

4

1 に答える 1

4

Windows ではなく Linux で Poly/ML を使用しています。しかし、次のことが Windows でも当てはまることはほぼ確実です。

usePoly/ML REPL を開始すると、既に最上位環境にある Basis Library のモジュールを読み込むために関数を使用する必要はありません。例えば:

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

この関数を使用してuse、独自のコードをロードします。引数は、絶対パスまたは現在の作業ディレクトリからの相対パスのいずれかでなければなりません。REPL で現在の作業ディレクトリを変更できるかどうかはわかりません。 必要に応じて、現在の作業ディレクトリを変更する方法については、こちらを確認してください。

また、大規模なプロジェクトの場合は、ではなくPoly/ML の make システム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
> 
于 2016-02-26T20:36:32.500 に答える