我正在尝试构建一个fibonacci包装函数,它接受多个命令行参数并为每个参数计算相关的Fibonacci数
答案 0 :(得分:1)
您应该使用read
或readMaybe
函数从Int
获取String
:
fibonacci_wrapper :: [String] -> Maybe Int
fibonacci_wrapper (x:_) =
case readMaybe x of
Just n -> Just (fibonacci n)
Nothing -> Nothing -- read failed
-- Not enough args
fibonacci_wrapper _ = Nothing
但是,如果要获取多个参数,则应该返回参数列表的其余部分以及Int
结果,以便继续使用参数。
答案 1 :(得分:1)
Wrapper 解决方案可能是:
wrapperStringToInt :: [String] -> [Int]
wrapperStringToInt [] = []
wrapperStringToInt (x:xs) = (read x :: Int) : wrapperStringToInt xs
您可以使用元组返回fibonacci 4 is 3
。函数 printFibonacci
打印每个元组的内容。
printFibonacci :: [(Int, Int)] -> IO ()
printFibonacci [] = return ()
printFibonacci ((x, z):xs) =
do putStrLn $ "fibonacci " ++ show x ++ " is " ++ show z
printFibonacci xs
命令
map f (wrapperStringToInt arguments)
where
f = (\ x -> (x, fibonacci x))
返回一个包含元组( Input, Output )
的数组(例如,使用[3,4,5]
,此命令返回[(3,2),(4,3),(5,5)]
)。
main = do
arguments <- getArgs
printFibonacci $ map f (wrapperStringToInt arguments)
where f = (\ x -> (x, fibonacci x))
之后,在终端中运行:
runhaskell Fibonacci.hs <INPUT>
(例如runhaskell Fibonacci.hs 3 4 5
)
最后,要执行像./program 4 5 6
这样的程序,你可以写一个可执行的bash程序,例如:
#!/bin/bash
runhaskell Fibonacci.hs "$@"
如果错误控制很重要,您应该使用Maybe,因为其他用户已评论过。我希望你发现这些信息很有用。