首页 > 解决方案 > 针对 haskell 程序测试每个数字

问题描述

所以我正在尝试编写一个从技术上测试 1 - 无穷大的程序。基本上我想用 take 告诉程序给我一个 take 要求的金额列表。所以只是为了澄清如果我输入了 5 我想返回 [1,2,3,4,5]。

-为了进一步澄清,我试图了解如何在大量时间里一遍又一遍地递归调用程序。我正在尝试编写一个程序,它将给我一个从 1 开始的下一个 x 偶数的列表,其中 x = 表示的数字。

标签: haskell

解决方案


首先关闭

让我们首先说您应该阅读如何提出一个好问题。你已经尝试过什么?为什么它现在有效?您是否有任何可以使用的代码?由于您似乎是一个完整的初学者,请查看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)

推荐阅读