aboutsummaryrefslogtreecommitdiff
path: root/cli/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/Main.hs')
-rw-r--r--cli/Main.hs67
1 files changed, 67 insertions, 0 deletions
diff --git a/cli/Main.hs b/cli/Main.hs
new file mode 100644
index 0000000..2c7aa7d
--- /dev/null
+++ b/cli/Main.hs
@@ -0,0 +1,67 @@
+import Math
+import System.Environment
+import Data.List
+import Text.Printf
+
+errorMessage :: String -> String
+
+errorMessage "" = "nd v1\nUsage: nd [-help, -int, -prime, -factor, -hcf]\n"
+errorMessage reason = "nd v1\nFAILURE: "
+ ++ reason
+ ++ "\nUsage: nd [-int, -prime, -factor, -hcf]\n"
+
+flagHandlerF :: [String] -> Int -> String -> ([String] -> String) -> String
+
+flagHandlerF args (-1) error fmessage =
+ if (length args) == 0
+ then error
+ else fmessage args
+
+flagHandlerF args nargs error fmessage =
+ if (length args) /= nargs
+ then error
+ else fmessage args
+
+flagHandler :: String -> [String] -> String
+
+flagHandler "-prime" args =
+ flagHandlerF args (-1)
+ (errorMessage "-prime requires at least one integer argument")
+ (\args ->
+ foldl (++) "" [show y ++ ": isPrime=" ++ (show $ isPrime y)
+ ++ "\n" | x <- args, let y = (read x) :: Int])
+
+flagHandler "-factor" args =
+ flagHandlerF args (-1)
+ (errorMessage "-factor requires at least one integer argument")
+ (\args ->
+ foldl (++) "" [show y ++ ": factors=" ++ show (factors $ y)
+ | x <- args, let y = (read x) :: Int])
+
+flagHandler "-int" args =
+ flagHandlerF args (-1)
+ (errorMessage "-int requires at least one integer argument")
+ (\args ->
+ foldl (++) "" [show y ++ ": (isPrime=" ++ (show $ isPrime y)
+ ++ ", factors=" ++ (show $ factors y)
+ ++ ")\n" | x <- args, let y = (read x) :: Int])
+
+flagHandler "-hcf" args =
+ flagHandlerF args (2)
+ (errorMessage "-hcf requires two integer arguments")
+ (\args ->
+ let n = (read $ head args) :: Int
+ m = (read $ head $ tail args) :: Int
+ hcf = head $ reverse $ intersect (factors n) (factors m) in
+ "hcf(" ++ show n ++ ", " ++ show m ++ "): hcf=" ++ show hcf)
+
+flagHandler _ _ =
+ errorMessage "Flag not recognised"
+
+
+main = do
+ args <- getArgs
+ putStr $
+ case args of
+ [] -> errorMessage ""
+ (x: xs) -> if x == "-help" then errorMessage "" else flagHandler x xs