aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2021-07-23 22:11:17 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2021-07-23 22:13:43 +0100
commit318edd7c95b841024c2f7cfc7478aa9c601e12e5 (patch)
tree323f7b94ea880c9fd2e9cff5a82f4a5c790b8a2d /cli
parent09940ff8297ccbe4e061a25b1cfd7dfa96f6950b (diff)
downloadnumberdisplay-318edd7c95b841024c2f7cfc7478aa9c601e12e5.tar.gz
numberdisplay-318edd7c95b841024c2f7cfc7478aa9c601e12e5.tar.bz2
numberdisplay-318edd7c95b841024c2f7cfc7478aa9c601e12e5.zip
(General)~moved cli files into seperate folder to make space for website
Diffstat (limited to 'cli')
-rw-r--r--cli/Main.hs67
-rw-r--r--cli/Makefile11
2 files changed, 78 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
diff --git a/cli/Makefile b/cli/Makefile
new file mode 100644
index 0000000..827617d
--- /dev/null
+++ b/cli/Makefile
@@ -0,0 +1,11 @@
+CC=ghc
+FILES=Main.hs ../Math.hs
+OUT=nd
+
+$(OUT): $(FILES)
+ $(CC) $^ -o $@
+
+.PHONY: run
+run:
+ $(MAKE)
+ ./$(OUT) -int 200 300 400 10009