haskell - 调用函数的haskell案例

标签 haskell error-handling functional-programming

我已经在这里待了很长时间了,我不知道出了什么问题
Haskell只是让我感到如此愚蠢

data Operation
    = Nth Integer


fib :: (Integral i, Integral j) => i -> j

fib   n | n == 0         = 1
        | n == 1         = 1
        | n == 2         = 1
        | n == 3         = 1        
        | otherwise = (fib(n-1)+fib(n-2))* fib(n-3) `div` fib(n-4)
main = do
command <- getLine
case command of
    Nth op -> show $ fib op
    Nothing -> "Invalid operation"

因此,当用户输入Nth 9时,需要使用n = 9调用fib函数并将输出提供给用户。我觉得我的案例控制结构合适,但我根本无法使它正常工作!!!

最佳答案

你快完成了。
使用deriving (Read)读取String作为Operation
http://en.wikibooks.org/wiki/Haskell/Classes_and_types#Deriving

如果要处理读取错误,请参见How to catch a no parse exception from the read function in Haskell?

data Operation = Nth Integer deriving (Read)

fib :: (Integral i, Integral j) => i -> j

fib   n | n == 0         = 1
        | n == 1         = 1
        | n == 2         = 1
        | n == 3         = 1
        | otherwise = (fib(n-1)+fib(n-2))* fib(n-3) `div` fib(n-4)
main = do
  command <- getLine
  print $ case read command of
    Nth op -> fib op

关于haskell - 调用函数的haskell案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161544/

相关文章:

java - 从可选值的供应商序列中提取第一个定义值(如果有)

haskell - 为什么 Data.Set 要求元素是 Ord 的实例?

xml - 不要用 HXT 替换 HTML 实体

python - 语法错误: invalid character in identifier Python 3.5.2 & tensorflow

c++ - 通过 out 参数处理错误会导致内存泄漏吗?

Java 8,匿名递归嵌套方法

c# - C# 中的功能纯骰子掷

haskell - 使用 yesod 从 ajax 请求中获取数据很热

haskell - 从子树中提取值

git - 如何将git merge 失败输出到文件