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
各関数は、実行時までわからないいくつかの引数を取ります。それらがリストにバインドされるのを見て、それらを関数に渡すにはどうすればよいですか? 手動で取得するだけですか?お気に入り:
exampleFunction (args !! 1) (args !! 2)
それはちょっと醜いようです。これを行うための慣用的な方法はありますか?エラーチェックについてはどうですか?私の関数は、渡されたパラメーターをばかげた順序で取得するなどのエラーを適切に処理する機能を備えていません。
また、重要なことに、ディスパッチの各関数は異なる数の引数を取るため、(上記のように) これを静的に行うことはできませんunCurry command args
。有効な Haskell ではないのは残念です。