haskell - 针对 haskell 程序测试每个数字
问题描述
所以我正在尝试编写一个从技术上测试 1 - 无穷大的程序。基本上我想用 take 告诉程序给我一个 take 要求的金额列表。所以只是为了澄清如果我输入了 5 我想返回 [1,2,3,4,5]。
-为了进一步澄清,我试图了解如何在大量时间里一遍又一遍地递归调用程序。我正在尝试编写一个程序,它将给我一个从 1 开始的下一个 x 偶数的列表,其中 x = 表示的数字。
解决方案
首先关闭
让我们首先说您应该阅读如何提出一个好问题。你已经尝试过什么?为什么它现在有效?您是否有任何可以使用的代码?由于您似乎是一个完整的初学者,请查看Learn You a Haskell
然而这是一个非常简单的问题,所以我只会给你答案
分析问题
这很简单,你需要一个函数evens :: Int -> [Int]
最基本的解决方案
Haskell 有一个列表构造函数,它以最基本的形式给你一个连续数字的列表:[1..10]
会给你从 1 到 10 的所有数字。因为 Haskell 是一种惰性语言,你不需要给它一个上限。即[1..]
只会返回一个包含所有数字的列表。
你也可以用一个间隔运行它,比如 2 表示偶数:[2,4..10]
会给你从 2 到 10 的偶数。所以你需要的函数确实是:
firstEvens :: Int -> [Int]
firstEvens n = [2,4..2*n]
这也相当于
firstEvens' :: Int -> [Int]
firstEvens' n = take n [2,4..]
递归
递归地,您可以运行您的函数。每一步只需乘以 2。
firstEvens'' :: Int -> [Int]
firstEvens'' 0 = []
firstEvens'' n = 2*n : firstEvens' (n-1)
推荐阅读
- php - 如何在 PHP 中登录后重定向
- spring-data-jpa - Spring Data JPA主键违规约束不起作用
- flutter - 颤振下拉项目未显示
- javascript - 如何使用 yup 和 formik 验证表单?
- javascript - 从字符串创建类/组件
- python - Visual Studio Code - MS python intellisense - 缩进/换行
- c# - c# 遍历通过会话传递的字典
- python - 就最低计算复杂度而言,如何创建一个新的 pandas 列,该列基于另一列增加一定数量
- variable-assignment - 匈牙利算法:确定覆盖全零的最小行数
- c - 成功插入后在二叉树中“丢失”我的根地址