2016-09-08 5 views
4

signature 또는 structure의 목록을 SML/NJ REPL의 최상위 환경에서 사용할 수 있습니까? sml 소스 디렉토리의 sources.cm 파일에 정의 된 것처럼 보이는 서명/구조 목록을 얻으려고합니다.서명 또는 구조에 대해 SML/NJ REPL에 질의 하시겠습니까?

- signature s = LIST; 

의 줄을 따라 뭔가가 최상위 환경의 바인딩을 대신 나열합니다.

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.listBoundSymbols는 사용할 수 있지만 아직하지 않은 모듈에 대한 기호 이름을 반환하지 않습니다 때문에 자동 로딩에 유의하시기 바랍니다 :

답변

5

당신은 SML/NJ가 제공하는 internal structures를 사용할 수있다 로드되었습니다 :

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

대단히 감사합니다. 자동 로딩을 강요하기 위해서 나는'CM.make ("$/basis.cm")'를 호출하여 기초 값을 강제로 추가 할 수 있음을 알았다. – jenesaisquoi

+0

@jenesaisquoi 감사합니다. 나는 그것을 몰랐습니다. BTW, 그 호출에서 괄호는 중복됩니다 :'CM.make "$/basis.cm"'. SML에서는 연관성을 명시 적으로 지정해야하는 경우에만 괄호가 필요합니다. 함수 호출을위한 구문으로 사용되지 않습니다. 공백은 함수 호출을 지정하는 데 사용됩니다. –