0

コマンドライン オプションがほとんどなく (たとえば 5 つ)、それらをタプルに変換したいと考えています。問題は、それらが正しい順序で表示されることを期待しているため、パターンマッチを使用してリストからタプルを簡単に構築できることですが、実際にはオプションをランダムな順序で提供できるため、リストの先頭に含まれているかどうかはわかりません詳細オプションまたはログ ファイル名?

継続渡しスタイルを使用してそれを行う方法を考えようとしましたが、何も役に立ちません。

それは可能ですか?

リストを予測順に並べ替えることができると思いますが、見栄えがよくありません。

また、タプルを削除してデータ レコードを作成することもできますが、それでも属性のタイプを確認し、レコードの正しいフィールドを設定することになります。相変わらずタイピングが多い。

4

1 に答える 1

1

あなたの説明を考えると、2 つの選択肢があると思います。2つのうち、辞書への変換が最も簡単だと思いますが、タプルへの変換は機能し、少し不器用です

したがって、次の定義を使用します。

options :: [OptDescr (String, String)]
options = [Option ['a'] ["alpha"] (ReqArg (\a -> ("alpha", a)) "empty") "",
           Option ['b'] ["beta"] (ReqArg (\a -> ("beta", a)) "empty") "",
           Option ['g'] ["gamma"] (ReqArg (\a -> ("gamma", a)) "empty") ""]

main = do
    args <- getArgs
    let (opts, nonopts, errs) = getOpt Permute options args
    putStrLn $ show opts

これから、私の出力例のいくつかは次のとおりです。

[("beta","b"),("alpha","a")]
[("alpha","a"),("gamma","g"),("beta","b")]

等々。コマンドラインと同じ順序。しかし、上記の設定方法により、基本的に連想リストがあるため、特に値 (アルファ、ベータ、ガンマ) を持つタプルが必要な場合、私の最良のオプションは...

(lookup "alpha" opts, lookup "beta" opts, lookup "gamma" opts)

結果のデータ型は、「アルファ」、「ベータ」、「ガンマ」の順で (文字列、文字列、文字列) になります。

于 2012-07-07T14:25:32.050 に答える