Haskell中的Fibonacci序列

时间:2017-12-08 05:55:19

标签: haskell fibonacci

我正在尝试构建一个fibonacci包装函数,它接受多个命令行参数并为每个参数计算相关的Fibonacci数

2 个答案:

答案 0 :(得分:1)

您应该使用readreadMaybe函数从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,因为其他用户已评论过。我希望你发现这些信息很有用。