私はHaskellで少しコマンドラインプログラムを書いています。コマンドライン引数に基づいて正しい暗号化機能にディスパッチする必要があります。私はこれまでのことを理解しましたが、残りの引数をパラメータとして関数に渡す必要があります。私が読んだ:Haskellでコマンドライン引数を使って関数を修正するためのディスパッチ
ここまで私を得てhttp://learnyouahaskell.com/input-and-output
を:
import qualified CaesarCiphers
import qualified ExptCiphers
dispatch::[(String, String->IO())]
dispatch = [("EEncipher", ExptCiphers.exptEncipherString)
("EDecipher", ExptCiphers.exptDecipherString)
("CEncipher", CaesarCiphers.caesarEncipherString)
("CDecipher", CaesarCiphers.caesarDecipherString)
("CBruteForce", CaesarCiphers.bruteForceCaesar)]
main = do
(command:args) <- getArgs
の各関数は、私がそれまでは、実行時間を知ることができませんいくつかの引数を取ります。彼らはリストに束縛されるので、それらを関数に渡すにはどうすればよいですか?私はそれらを手動でつかむだけですか? Like:
これは醜いようです。これを行う慣用的な方法がありますか?エラーチェックはどうですか?私の関数は、パラメータを愚かな順序で渡すようなエラーを正常に処理する機能を備えていません。
また、重要なことに、ディスパッチの各関数は異なる数の引数を取るため、このように静的に行うことはできません(上のように)。unCurry command args
は有効ではありません。
で、この問題に対する興味深いソリューションを持っています。あなた自身の解決策を見つけることを妨げることはありません。 – ephemient