查询SML/NJ REPL中的签名或结构?

查询SML/NJ REPL中的签名或结构?,sml,smlnj,Sml,Smlnj,有没有办法从SML/NJ REPL获取顶级环境中可用的签名s或结构s列表?我希望得到一个签名/结构列表,这些签名/结构似乎是在sml源目录中的sources.cm文件中定义的。类似于 - signature s = LIST; 只在顶级环境中列出绑定。您可以利用SML/NJ提供的: fun boundSignatures () = let fun isSignature symbol = Symbol.nameSpace symbol = Symbol.SIGspace v

有没有办法从SML/NJ REPL获取顶级环境中可用的
签名
s或
结构
s列表?我希望得到一个签名/结构列表,这些签名/结构似乎是在sml源目录中的
sources.cm
文件中定义的。类似于

- signature s = LIST;
只在顶级环境中列出绑定。

您可以利用SML/NJ提供的:

fun boundSignatures () =
  let
    fun isSignature symbol = Symbol.nameSpace symbol = Symbol.SIGspace
    val signatures = List.filter isSignature (EnvRef.listBoundSymbols ())
  in
    List.app (fn s => print (Symbol.name s ^ "\n")) signatures
  end
请注意,由于自动加载,
EnvRef.listbundsymbols
不会返回可用但尚未加载的模块的符号名称:

- boundSignatures ();
ENVREF
val it = () : unit
- signature S = STATICENV;
[autoloading]
[autoloading done]
- boundSignatures ();
STATICENV
ENVREF
S
val it = () : unit

很好,谢谢。要强制自动加载,我发现我可以调用
CM.make(“$/basis.CM”)
强制添加基值。@jenesaisquoi谢谢,我不知道。顺便说一句,该调用中的括号是多余的:
CM.make“$/basis.CM”
。在SML中,仅当需要显式指定关联性时才需要括号。它们不是函数调用的语法。空格用于指定函数调用。