[解決済み] Haskellファイル読み込み
2022-02-10 02:42:33
質問
最近Haskellを学び始めたのですが、ファイル読み込みがどのように行われるのかがわからず、困っています。
例えば、私は数字が書かれた行を含むテキストファイル "test.txt" を持っています。
32 4
2 30
300 5
各行を読んでから、各単語を評価し、追加したい。
したがって、次のようなことをやろうとしているのです。
import System.IO
import Control.Monad
main = do
let list = []
handle <- openFile "test.txt" ReadMode
contents <- hGetContents handle
singlewords <- (words contents)
list <- f singlewords
print list
hClose handle
f :: [String] -> [Int]
f = map read
完全に間違っているのは分かっているのですが、構文の正しい使い方が全く分かりません。
また、例題やコードの説明がある良いチュートリアルのリンクもお願いします。 これ を完全に読みました。
解決方法は?
まずまずの滑り出しです。ただひとつ覚えておいてほしいのは、純粋な関数アプリケーションでは
let
の代わりに、バインディングの
<-
.
import System.IO
import Control.Monad
main = do
let list = []
handle <- openFile "test.txt" ReadMode
contents <- hGetContents handle
let singlewords = words contents
list = f singlewords
print list
hClose handle
f :: [String] -> [Int]
f = map read
これが、コンパイルして実行するために必要な最小限の変更点です。スタイル的には、いくつかのコメントがあります。
-
バインディング
list
は少し怪しげに見えます。これは値list
-- 代わりに古い定義をシャドウイングしています。 - 純粋な関数をもっとたくさんインライン化しよう
-
可能な場合は
readFile
は、手動でファイルを開いたり、読んだり、閉じたりするよりも望ましいです。
この変更を実装すると、次のようになります。
main = do
contents <- readFile "test.txt"
print . map readInt . words $ contents
-- alternately, main = print . map readInt . words =<< readFile "test.txt"
readInt :: String -> Int
readInt = read
関連
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Gitで1つのファイルの作業コピーの変更を元に戻す?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Pythonでファイルを移動するには?
-
[解決済み] Goでファイルが存在するかどうかを確認する方法は?
-
[解決済み] node.jsでファイルを移動するにはどうしたらいいですか?
-
[解決済み] Ant タスクで、ファイルが存在する場合のみ Ant ターゲットを実行する?
-
[解決済み】Haskellの入門編
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] System.ComponentModel.Win32Exception (0x80004005): ixwebhosting [closed]でアクセスが拒否されました。
-
[解決済み] このシンプルなfile.managed saltstackの構成は、何が問題なのでしょうか?
-
[解決済み] wget & curl output "No such file or directory".
-
[解決済み] バイナリファイルを比較して、同じファイルかどうかを確認する方法は?
-
[解決済み] PowerShellでファイルのバージョンを取得する
-
[解決済み] Linuxでスクリプトを使用してファイルのエンコーディングを調べるにはどうしたらいいですか?
-
[解決済み】ターミナル(bashシェル)でファイルやディレクトリを高速に削除する方法【非公開
-
[解決済み】S3バケットに保存したオブジェクトの数を確認する方法は?
-
[解決済み] node.jsでファイルを移動するにはどうしたらいいですか?
-
[解決済み] ファイルやディレクトリが存在するかどうかを確認する方法を教えてください。重複