Haskell 中的斐波那契数

2023-12-01

大家好,我需要将我的 F# 代码更改为 Haskell 代码,但我对 Haskell 还很陌生,我不能这样做。我的代码只是从键盘读取数据,如果数据不是整数,则返回错误消息,然后计算 n 斐波那契数,然后写入list 之后将列表写入 txt 文件这是我的代码

open System
let rec fib n = 
    match n with
    |0->0
    |1->1
    |2->1
    |n->fib(n-1)+fib(n-2);;

let printFibonacci list = 
    for i=0 to (List.length list)-1 do
        printf "%d " (list.Item(i));;

let writeToFile list = 
    let file = System.IO.File.Create("C:\out2.txt")
    let mutable s =""
    let writer = new System.IO.StreamWriter(file)
    try
        for i=0 to (List.length list)-1 do
        s <- list.Item(i).ToString()
        writer.Write(s+" ")

    finally
        writer.Close()
        file.Dispose()
        printfn "Writed To File"


let mutable control = true
let mutable num = 0
while control do 
    try
    printfn "Enter a Number:" 

    num <- Convert.ToInt32(stdin.ReadLine()) 
    let listFibonacci = [for i in 0 .. num-1->fib(i)]
    printFibonacci(listFibonacci)
    printfn "\n%A"(listFibonacci)
    writeToFile(listFibonacci)
    control<-false
    with
        | :? System.FormatException->printfn "Number Format Exception";

Console.ReadKey true|>ignore

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = do putStrLn "Enter a number:"
          num <- readLn
          fibs = map fib [0..n]
          mapM' print fibs

然而,由于 haskell 很懒,所以有一种聪明的方法来定义所有斐波那契数的列表。由于您想要该列表的前缀,因此使用此定义更自然(也更有效):

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

main = do putStrLn "Enter a number:"
          num <- readLn
          mapM' print (take n fibs)

编辑:写入文件而不是标准输出替换print with (\num -> appendFile "filename" (show num)) or (appendFile "filename" . show).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 中的斐波那契数 的相关文章

  • 为什么 Haskell 中有协函子和逆变函子的区别,而范畴论却没有区别?

    这个答案是从范畴论的角度来看的 https math stackexchange com a 661989 72174包括以下语句 事实是 协函子和逆变函子之间没有真正的区别 因为每个函子只是一个协变函子 More in details a
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • 在 Haskell 中,为什么我必须在这段代码中使用美元符号?

    我仍在尝试破解这段代码 import Data Char groupsOf groupsOf n xs take n xs groupsOf n tail xs problem 8 x maximum map product groupsO
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • 如何在 Haskell 中向右或向左移动列表的 1 个元素?

    嗨 我一直在寻找答案 但找不到 假设我们有一个像这样的列表 1 10 4 5 3 我怎样才能将 5 向左移动 使这个列表变成 1 10 5 4 3 我尝试过了swapElementsAt通过找到该元素的索引 但它看起来非常不足 swapEl
  • Haskell 中的分类结构

    Hask通常被认为是一个范畴 其对象是类型 态射是函数 然而 我看到 Conor McBride pigworker 警告不要使用Hask多次 1 https stackoverflow com a 45905082 474311 2 ht
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • QuickCheck是否可以生成任意函数

    我试图为身份编写一个 QuickCheck 测试 f y f y 我最初的计划是编写一个返回函数和整数的任意生成器 具有签名Gen Int gt Int Int 并在prop DollerDoesNothing使用 不使用测试该功能应用程序
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 约束包如何工作?

    背后的想法数据 约束 Forall http hackage haskell org packages archive constraints 0 3 2 doc html src Data Constraint Forall html据我
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored

随机推荐

  • Scala:确保大括号平衡

    我正在运行代码来平衡语句中的括号 我认为我已经得到了正确的结果 但它在一个特定的陈述上失败了 我需要理解为什么 这是测试 特别是它失败了 除了编码之外 我认为我需要修复算法 有什么指示吗 def balance chars List Cha
  • 将“Cookie”放入“CookieJar”中

    我正在使用PythonRequests库来发出 HTTP 请求 我从服务器获取文本形式的 cookie 我怎样才能把它变成CookieJar里面有饼干吗 旧版本的Requests图书馆 0 14 2和更老的 当你经过时 把新的饼干放进罐子里
  • 如何使用 Jquery 或 Javascript 更改 .CSS 文件?

    我想知道是否可以使用 Jquery 或 javascript 对 css 文件进行更改 我知道 我可以动态地将 css 属性 或类 添加到 DOM 元素 但我不想要那样 我想在 css 文件中进行更改以自定义 css 文件的 css 类 请
  • 如何为 EF Code First 配置 ProviderManifestToken

    我有一个使用 EF 代码优先的 asp net MVC3 项目 对于我的单元测试 我一直使用 SQL Server CE 4 0 和 SQL Server 2008 Express 两者都与 EF 完美配合 按预期生成我的数据库 但是 当我
  • Jackson Scala JSON 反序列化为案例类

    我有一个 JSON 其形式如下 inventory productType someProduct1 details productId Some id description some description productType so
  • 如何在 Puppeteer page.$eval 中传递函数/变量? [复制]

    这个问题在这里已经有答案了 我正在使用 Puppeteer 自动填写网络表单 每次 input 字段中的名称都应更改为数组中的不同名称 如果我直接在 page eval 函数中指定一个名称 例如 Michael 一切都会按预期工作 pupp
  • 删除序列化程序创建的空 xmlns

    我有一个由 添加服务引用 操作生成的对象 并且我使用我编写的通用序列化器手动序列化它 我的问题是数据契约有一些内部对象 序列化程序将一个空的命名空间属性添加到内部对象的起始标记中 有什么办法可以阻止这种情况发生吗 让你的内部对象与根属于同一
  • Rust 中的共享循环引用

    我正在尝试实现一个非常幼稚的线程池模型 目前线程池的职责是 create一个新线程并返回对其的引用 维护已创建线程的映射 根据线程触发的不同事件来改变线程 我的主要问题是上面的要求迫使我让线程池保持一个HashMap
  • 在 Spring Boot 2.0 中使用 Web 客户端访问 HTTPS RESTful 服务抛出异常

    我必须访问一个 https Rest Web 服务 https example com 其证书已由客户端提供 其中包含 2 个 cer 文件 我创造了keystore jks and truststore jks文件和imported th
  • 为什么 bash 中的“test -n”返回“true”?

    我想知道怎么来的 test n 返回 true 例如 if test n then echo yes else echo no fi 打印 yes 即使给出了 test 理论上 一个空长度字符串作为参数以及选项 n 它检查字符串长度是否为
  • Ubuntu,Docker - proxyconnect tcp:tls:收到长度为 20527 的超大记录

    我正在运行我构建的 docker 二进制文件 如下this 当我做一个docker pull 我收到此错误 来自守护程序的错误响应 获取https registry 1 docker io v2 proxyconnect tcp tls 收
  • 如何在处理中的draw()之后删除先前的形状

    我无法弄清楚这一点 我有一个草图 上面有一些旋转的小矩形 它们在每次绘制 时轮换 然而 之前的矩形仍然可见 我尝试移动背景 但它要么删除除一个矩形之外的所有矩形 要么不会清除屏幕 我希望能够在每次绘制后清除所有矩形 这是代码 Create
  • 当我在瀑布对话框中使用自适应卡的输入形式时,ContinueDialogAsync 不起作用

    我一直在使用 EchoBot 模板 最近使用了 VirtualAssistant 模板 在之前的模板中 提交输入表单数据没有问题 但是这个模板仅仅提交输入表单数据就无法与ContinueDialogAsync配合使用 我们该如何解决这个问题
  • C++ 中的堆栈、静态和堆

    我查了一下 但对这三个概念不太理解 我什么时候必须使用动态分配 在堆中 以及它的真正优势是什么 静态和堆栈有什么问题 我可以编写整个应用程序而不在堆中分配变量吗 我听说其他语言包含 垃圾收集器 因此您不必担心内存 垃圾收集器做什么 你可以自
  • RecyclerView 内项目中的工具提示(与项目上方重叠)

    我需要创建一个RecyclerView与多个ViewTypes 但是 在某些项目上 我需要显示Tooltip它应该悬停在上面的行上 My requirement is 上图中 有 4 个项目RecyclerView 并且下行中的工具提示应重
  • 多个选择框并将值作为 url 参数发送

    我有这个html
  • HTML 5

    我有一个简单的自动播放片段 可以播放音频文件 但是我想知道是在 JavaScript 中还是作为属性在特定时间播放该文件 例如 3 26
  • 字体很棒,输入类型“提交”

    font awesome 中似乎没有输入类型 提交 的类 是否可以使用 font awesome 中的某些类进行按钮输入 我已将图标添加到应用程序中的所有按钮 实际上与 twitter bootstrap 中的 btn 类链接 但无法在 输
  • 如何获取已购买的应用程序列表,包括价格? [复制]

    这个问题在这里已经有答案了 背景 我有一个小应用程序 here 用于显示应用程序列表 最近 我得知有一个应用程序 here 显示已购买的应用程序列表 包括其价格 我已经测试过了 它确实显示了所有购买的应用程序 就像在 Google Play
  • Haskell 中的斐波那契数

    大家好 我需要将我的 F 代码更改为 Haskell 代码 但我对 Haskell 还很陌生 我不能这样做 我的代码只是从键盘读取数据 如果数据不是整数 则返回错误消息 然后计算 n 斐波那契数 然后写入list 之后将列表写入 txt 文