2017-04-25 6 views
-1

私はSMLで書いたpythonファイルから関数を呼び出そうとしています。私はタイコンのミスマッチのエラーを受けています。なぜ私は理解できません。SML内のPython関数を呼び出す

def interpreter(input, output): 
    x = Interpreter() 
    x.interpreter(input, output) 
+3

[SMLプログラムでPythonファイルを呼び出しますか?](http://stackoverflow.com/questions/43353918/call-a-python-file-in-a-sml-program)一度質問してください。 –

+0

コードの区切りは、字下げではなく字下げでフォーマットしてください。テキストを選択して '{}'ボタンを押すと、通常は正しいことが実行されます。 – molbdnilo

+0

評価はそれ自身の結果に依存するので、決して終了しません。 – molbdnilo

答えて

2

コンパイラがしようとしている:これは私のSMLコード

fun interpreter(inFile: string, outFile: string)= 
let 
    val s = interpreter(inFile, outFile) 
in 
    OS.Process.system ("python interpreter.py"^s) 
end; 

そして、これは私が

- use "in.sml"; 
[opening in.sml] 
in.sml:1.6-6.6 Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch] 
    expression: ?.OS_Process.status 
    result type: string 
    in declaration: 
    interpreter = 
     (fn (<pat> : string,<pat> : string) => 
      let val <binding> in OS.Process.system <exp> end) 
val it =() : unit 

これは私が呼んしようとしているのpythonでの方法であるを受けていますエラーです再帰的に呼び出すinterpreterの結果/戻り値のタイプをval s = interpreter(inFile, outFile)と調整します。コンパイラはでなければならないと考えています。^と連結していますが、OS.Process.system ("python interpreter.py"^s)によって返される値を返す関数の本体は?.OS_Process.statusである必要があります。

+0

それでは、SML関数から受け取った引数を使って、Pythonで関数を呼び出すにはどうしたらいいですか?私はちょうど 'OS.Process.system(" python interpreter.py ")'のように連結を取り除くだけでしょうか?そうすれば、smlプログラムはコンパイルして、この 'valインタプリタ= fn:string * string-> Word32.wordを返すことができます。val it =():unit'私のプログラムはPythonでテキストファイルを出力する必要があります。私は期待すべき出力? – arizq29

関連する問題