1

これは少し長いので、我慢してください!

uni プロジェクトの一部として使用しなければならない Haskell プログラムの操作に少し問題があります。参考までに、それはCasperです。

したがって、スクリプトを実行することになっています。これは、実際には次のように Hugs インタープリターを呼び出す Bash スクリプトです。

exec $HUGSBIN/hugs $HUGSARGS +p"Casper> " $FILES

$FILES は Main.lhs ファイルを指します。

この後、インタープリターでファイルへのパスを指定して「コンパイル」関数を呼び出す必要があります。

上記をスクリプトで実行する必要があります。バックグラウンドでCasperを呼び出すプログラムを書いているので、これを自動化する必要があります。

そこで、.lhs ファイルをコンパイルしました。「コンパイル」機能を実行したいのですが、これがどのように行われるのかわかりません。私は試します:

./Main compile <a path>

コマンドラインからですが、ファイル「テスト」が見つからないというエラーが返されます。調査すると、Main.lhs ファイルに次の行が表示されます。

>main :: String -> IO()
>main = compile "test"

>compile :: String -> IO()
>compile s = catch (compile0 False s) handler

[...snipped]

2行目はこの質問を解決します。私の質問は、「コンパイル」関数を呼び出して、main.lhs をコンパイルした後にパスを渡すにはどうすればよいかということです。インタープリターから「compile」と入力するだけで動作しますが、main.lhs をコンパイルしてコマンド ラインから実行した後、同じように動作しませんか? 理由はありますか?他のすべてが失敗した場合、ハグをスクリプト化する方法はありますか?

ご協力ありがとうございます。

4

2 に答える 2

4

経由で Haskell プログラムに渡されたコマンドライン引数にアクセスできますgetArgs。たとえば、次のようなメイン関数が必要なようです。

>main = do
>    args <- getArgs
>    case args of
>        [] -> putStrLn "What file did you want me to compile?"
>        [filename] -> compile filename
>        _ -> putStrLn "I only compile one file at a time."

味に変更します。

于 2012-06-12T20:27:14.093 に答える
2

mainと置き換えます

 main = getArgs >>= \(arg1:_) -> compile arg1

これにより、最初のコマンド ライン引数 ( arg1)compileが "test" の代わりに渡され、残り ( _) は無視されます。追加する必要があるかもしれません

 import System

また

import System.Environment

このために抱擁に何が必要か思い出せません。

于 2012-06-12T20:31:02.247 に答える