【Haskell】コマンドライン引数の取得を活用する。
しばらく取り組んでいるブログに役立つプログラム作りのために、少し脇道にそれて頑張る。
普通にコマンドライン引数を取得して出力するだけなら
こんな風に書ける。ちなみにこのプログラムは簡単に書くと
こんな風にも書ける。簡単バージョンだな。
またgetArgsの出力は文字列のリスト、[String]で得られる。
ところでGHCの吐き出すexeファイルにファイルを1つ、もしくは複数個D&Dすると
その絶対パスのリストが得られることが分かった。
これをうまく解析してやれば、Ver.1のプログラムをもう少し改善出来そうだ。
というわけでドラッグ&ドロップされたファイルのパスのリストの取得&出力をするプログラムを書く。
このような関数定義はパターンマッチをうまく使うと綺麗に書ける。
(パターンマッチについてはまだ書いてないのでそのうち)
少し解説すると、一つ一つは簡略バージョンの描き方。
またgetCharとprintのコンビは、コマンドプロンプトがすぐに閉じないようにするために入れてある。
これをすると、1つまたは複数個のファイルをD&Dしたとき、そのパス名リストを出力してくれる。
また今回はgetArgsを使ったが、どうもgetContentsのままでもこれは出来るらしく
こういったのを組み合わせてブログの記事リスト作りプログラムを改良する。
category of Haskell:
【Haskell】とても簡単なHaskellプログラムについて
【Haskell】標準入力(stdin)を読み込むために
【Haskell】結構頻繁に使う関数などの話
【Haskell】高階関数と型の定義について
【Haskell】リストの処理について
【Haskell】コマンドライン引数を得る方法
【Haskell】C言語の構造体のようなものをHaskellで利用する
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.0)
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.1)
普通にコマンドライン引数を取得して出力するだけなら
import System
main = do args <- getArgs
print args
こんな風に書ける。ちなみにこのプログラムは簡単に書くと
import System
main = getArgs >>= print
こんな風にも書ける。簡単バージョンだな。
またgetArgsの出力は文字列のリスト、[String]で得られる。
ところでGHCの吐き出すexeファイルにファイルを1つ、もしくは複数個D&Dすると
その絶対パスのリストが得られることが分かった。
これをうまく解析してやれば、Ver.1のプログラムをもう少し改善出来そうだ。
というわけでドラッグ&ドロップされたファイルのパスのリストの取得&出力をするプログラムを書く。
import System
main = do getArgs >>= printArgs
getChar >>= print
printArgs :: [String] -> IO ()
printArgs (f:l) = do putStrLn f
printArgs l
printArgs [] = putStr ""
このような関数定義はパターンマッチをうまく使うと綺麗に書ける。
(パターンマッチについてはまだ書いてないのでそのうち)
少し解説すると、一つ一つは簡略バージョンの描き方。
またgetCharとprintのコンビは、コマンドプロンプトがすぐに閉じないようにするために入れてある。
これをすると、1つまたは複数個のファイルをD&Dしたとき、そのパス名リストを出力してくれる。
また今回はgetArgsを使ったが、どうもgetContentsのままでもこれは出来るらしく
こういったのを組み合わせてブログの記事リスト作りプログラムを改良する。
category of Haskell:
【Haskell】とても簡単なHaskellプログラムについて
【Haskell】標準入力(stdin)を読み込むために
【Haskell】結構頻繁に使う関数などの話
【Haskell】高階関数と型の定義について
【Haskell】リストの処理について
【Haskell】コマンドライン引数を得る方法
【Haskell】C言語の構造体のようなものをHaskellで利用する
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.0)
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.1)
スポンサーサイト
- posted 19:25 |
- Trackback(0) |
- Comment(0) |
- Page Top