wvogel日記

自分用の技術備忘録が多めです.

辞書

前も書いた、Haskellでの拡張型辞書。
一応の検索機能、追加機能を実装し、version1.0は完成


あとはこれに、逆引き機能つけたり、文字列内検索付けたり、
あわよくばGUIにしたりできればいいんですが
上の二つの機能はすぐできるにしても、それ以上はまだ今の私ではできないので。


とりあえずソースコード

import IO

main = do cs <- getContents
          search $ lines cs

search :: [String] -> IO()
search (w:ws)=do handle <- openFile "list.txt" ReadMode
                 fs <- hGetContents handle
                 search' w (maketouple $ words fs)
                 hClose handle
                 search ws
    where
    search' w []= putStrLn
                   "No Data!\nAdd that word?\n\tYES:y\n\tNO:else\n"
                   >> register (w:ws)
    search' w (list:lists)
        | w == "exit" = error("\r exit from program.....")
        | w == fst list = putStrLn ("]"++snd list)
        | otherwise = search' w lists

register :: [String] -> IO()
register (x:y:xs)
    | y == "y" = do appendFile "list.txt" (x++" "++(head xs)++"\n")
                    putStrLn "-------finish to register!"
                    search $ tail xs
    |otherwise = search xs

maketouple :: [a] -> [(a,a)]
maketouple [x,y] = [(x,y)]
maketouple (x:y:xs) = (x,y):maketouple xs

これだけで一応の機能は備わっています


ただ、プログラムの終了条件に
error式
を使っているのもよくない。
プログラム終了関数があると思うけど、とりあえずこれで代用してしまっている。
しかし30行(Editraでは28行)
で一応の、使い道があるものが書けるというのは楽しいな