测试每一个数字对haskell程序[关闭]

xzlaal3s  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(155)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

4年前关闭。
Improve this question
所以我想写一个程序来测试1 -无穷大,基本上我想用take来告诉程序,给予我一个take要求的数量的列表,所以澄清一下,如果我输入take 5,我想得到[1,2,3,4,5]。

  • 为了进一步澄清,我试图理解如何递归地调用一个程序,一遍又一遍的次数采取说。我试图写一个程序,将给予我的下一个x偶数从1开始的列表,其中x =采取说的数字。
ddarikpa

ddarikpa1#

First Off

看看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)

相关问题