我正在学习函数式编程Haskell。
我要求我需要从命令行读取整数值和最大值,我需要确定整数值是否在[1 to max value]
的范围内。我需要确定是否有任何范围的值除以整数值。
例如:
program 5 20
然后我需要检查[1, 2, ..., 20]
中的任何值是否可以按排序顺序整除5。
如何编写这样的功能?
我已将该论点视为
main = do
args <- getArgs
let first_divisor = args !! 0
let upper_bound = args !! 1
let x = read first_divisor :: Integer
let y = read upper_bound :: Integer
--print args
--putStrLn first_divisor
--putStrLn second_divisor
--putStrLn upper_bound
isDivisible x y
我需要写这个isDivisible函数,它从1循环到y,如果是(1 / x 2 / x .... y / x),它会打印成功或失败。
我认为循环为:
repeatNTimes 0 = return ()
repeatNTimes n =
do
-- my stuff
repeatNTimes (n-1)
然而,这将从n迭代到0,我想从1迭代到20。
如何在Haskell中执行此操作以便检查我的奇数值?
答案 0 :(得分:1)
当你有一个清单时,你不需要循环
使用map
和mapM
isDivisible :: Int -> Int -> [String]
isDivisible firstDivisor upperBound = map (isDivided firstDivisor) [1 .. upperBound]
isDivided :: Int -> Int -> String
isDivided 0 _ = "Failed"
isDivided d x = if mod x d == 0
then "Success"
else "Failed"
main :: IO ()
main = do
input <- getLine
let args = words input
let first_divisor = args !! 0
let upper_bound = args !! 1
let x = read first_divisor :: Int
let y = read upper_bound :: Int
let results = isDivisible x y
mapM_ putStrLn results