(* -*- mode: sml -*- * $Id: spellcheck.smlnj,v 1.2 2001/07/09 00:25:28 doug Exp $ * http://www.bagley.org/~doug/shootout/ *) structure Test : sig val main : (string * string list) -> OS.Process.status end = struct open TextIO; fun chop str = String.substring (str, 0, (String.size str) - 1); fun spellcheck () = let val dict = HashTable.mkTable (HashString.hashString, op =) (40000, (Fail "not found")) in let val din = openIn "Usr.Dict.Words" fun init_dict din dict = ( HashTable.insert dict (chop (inputLine din), 1); init_dict din dict ) in init_dict din dict end handle EndOfFile => (); let fun check_words dict = let val word = chop (inputLine stdIn) in case HashTable.find dict word of SOME _ => () | NONE => (print word ; print "\n"); check_words dict end in check_words dict end handle EndOfFile => () end fun atoi s = case Int.fromString s of SOME num => num | NONE => 0; fun main(name, args) = let val arg = hd(args @ ["1"]) val num = atoi arg in spellcheck (); OS.Process.success end end val _ = SMLofNJ.exportFn("spellcheck", Test.main);