自己拡張型辞書
まずはソースコード
import IO main = do cs <- getContents search $ lines cs search :: [String] -> IO() search (w:ws)=do handle <- openFile "list.txt" ReadMode fs <- hGetContents handle putStrLn $ search' w (maketouple $ words fs) hClose handle search ws where search' _ [] = "There is no data....." search' ws (list:lists) | ws == fst list = snd list | otherwise = search' ws lists maketouple :: [a] -> [(a,a)] maketouple [x,y] = [(x,y)] maketouple (x:y:xs) = (x,y):maketouple xs
最初、文字列を出力を表示する部分を、
putStrLn
ではなく
putStrとやっていたら、すべての文字入力を受け付けてからじゃないと画面に出力されなかったけれど、(遅延評価故)
改行つき出力にしてやるだけで入力毎に結果を出してくれるようになりました。
これはあれですね、改行があるだけで、そのデータ枚に出力をしないといけない、と明示できるのでそうなるのでしょう。
大分遅延評価にも慣れてきた。
ただ、もう少し綺麗に書ける気がしないでもない
まず、ファイル処理をsearch関数に書いちゃってるのはだめですね。
mainに移しておくべきか。
そしたら、ちゃんと副作用となる部分と純粋関数を分けられる。
とりあえず、骨組みは完成
あとは、単語追加機能を加えれば一応私の中では完成
(逆引きは、私の使用範囲では必要ないのでつけない。searchと似たような処理だし)