在Haskell中整理列表理解

栏目: 编程语言 · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/47983444/tidying-up-a-list-comprehension-in-haskell

所以我试图在Haskell中生成一个出租车编号列表.出租车编号是可以用两种不同方式写成两个不同立方体之和的数字 – 最小的是

1729 = 1 ^ 3 12 ^ 3 = 9 ^ 3 10 ^ 3.

就目前而言,我只是想要生成“弥补”出租车编号的四个数字,例如: (1,12,9,10),并被告知使用列表理解(我不太熟悉).此函数将生成所有4元组,其中最大数字最多为n:

taxi n = [(a,b,c,d) | a <- [1..n], b <- [1..n], c <- [1..n], d <- [1..n], a^3 + b^3 == c^3 + d^3, a < b, a < c, c < d]

但是,由于以下几个原因很麻烦:

> a,b,c,d的域都是相同的,但我无法弄清楚如何简化这段代码,所以[1..n]只写一次.

>我想要一个没有上限的无限列表,所以我可以让程序尽可能长时间地运行并在我请求时终止它.很明显,如果我只设置一个<- [1 ..]等,那么程序永远不会最终评估任何东西.

>程序非常慢:只需50秒的出租车需要19秒.

任何速度优化也会很好,但如果不是我使用的天真方法就足够了.

你的约束意味着<c<d
taxi n = [ (a,b,c,d) | b <- [1..n],
                       d <- [1..b-1],
                       c <- [1..d-1],
                       a <- [1..c-1],
                       a^3 + b^3 == c^3 + d^3 ]

为了无限,只需使用b<- [1 ..]. 另一个重大改进是计算其他三个变量中的一个:

taxi = [ (a,b,c,d) | b <- [1..],
                     c <- [1..b-1],
                     a <- [1..c-1],
                     let d3 = a^3 + b^3 - c^3,
                     let d = round(fromIntegral(d3)**(1/3)),
                     c < d,
                     d^3 == d3 ]

在GHCi中对出租车50进行基准测试:设置如下:

Yours:          (16.49 secs, 17,672,510,704 bytes)
My first:        (0.65 secs,    658,537,184 bytes)
My second:       (0.09 secs,     66,229,376 bytes)  (modified to use b <- [1..n] again)
Daniel's first:  (1.94 secs,  2,016,810,312 bytes)
Daniel's second: (2.87 secs,  2,434,309,440 bytes)
湾因此>

翻译自:https://stackoverflow.com/questions/47983444/tidying-up-a-list-comprehension-in-haskell


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

網絡社會之崛起

網絡社會之崛起

曼威·柯司特 / 夏鑄九、王志弘 等 / 唐山 / 2000-11 / NT$550

本書解釋了今日重塑世界的兩股強大但相互衝突的潮流:全球化與認同。資訊科技的革命以及資本主義的再結構已經引動了網絡社會,並帶來了策略,除經濟行為的全球化、工作的彈性化與不穩定,以及真實的虛擬文化。但是,伴隨著資本主義的轉化與國家主義的消亡而來的,是集體認同的表達以火力十足的方式竄起。它們挑戰了全球化中的文化單一性以及對於生活、環境的控制。曼威.柯司特在本書中描繪了社會運動的根源、目標以及效果,包括了......一起来看看 《網絡社會之崛起》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码