gpt4 book ai didi

list - 过滤两个列表的较大元素

转载 作者:行者123 更新时间:2023-12-03 23:26:16 25 4
gpt4 key购买 nike

我正在尝试编写一个 Haskell 程序,它输出一个素数列表,但只输出那些平方大于前一个和后一个素数的乘积的那些。例如,给定

primes = [2, 3, 5, 7, 11, 13, 17]
-- keep 5 since 5² > 3*7
-- keep 11 since 11² > 7*13
我的计划是创建正方形和相邻乘积的列表,然后使用过滤器仅输出素数列表中正方形大于相邻乘积的那些元素。
这是我到目前为止
products :: [Int]
products = zipWith (*) primes (drop 2 primes)

squares :: [Int]
squares = zipWith (*) (drop 1 primes) (drop 1 primes)

goodPrimes :: [Int]
goodPrimes = filter (\products, squares -> squares > products) (drop 1 primes)

一切正常,但 goodPrimes 功能。
我希望一切都清楚,有人可以帮助我。

最佳答案

您的 goodPrimes 中有语法错误lambda(参数之间的逗号)。
我们还需要配对您的乘积、平方和素数列表的元素(使用 zip3)。

primes :: [Int]
primes = [2, 3, 5, 7, 11, 13, 17]

squares :: [Int]
squares = zipWith (*) (tail primes) (tail primes)

products :: [Int]
products = zipWith (*) primes (drop 2 primes)

goodPrimes :: [Int]
goodPrimes = fmap (\(prime, _, _) -> prime)
$ filter (\(prime, prod, square) -> square > prod)
$ zip3 (tail primes) products squares
我们可以内联平方的计算来使 goodPrimes更干净,然后我们可以删除 squares .
goodPrimes :: [Int]
goodPrimes = fmap fst
$ filter (\(prime, prod) -> prime * prime > prod)
$ zip (tail primes) products
λ> goodPrimes
[5,11]

关于list - 过滤两个列表的较大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66008338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com