gpt4 book ai didi

list - Haskell-我如何遍历和比较数组/列表

转载 作者:行者123 更新时间:2023-12-04 22:52:28 37 4
gpt4 key购买 nike

我是 Haskell 的新手,但在其他一些语言方面是老手。(这道题取自汇编语言练习,但我想用 Haskell 来解决它。它不是家庭作业的一部分,也不是测试题)

鉴于: 具有列表内值的数组(列表)遵循以下模式:

第一项小于第二项,第二项大于第三项,第三项小于第四项,依此类推(“波浪”)。

问题:

1 如何在 Haskell 中解决它?(我知道如何用其他可以处理数组索引的语言解决它,但我不知道如何用函数式语言解决它。

  1. 答案能否泛化以解决其他模式?

最佳答案

这可以很容易地用 Haskell 表达

wave :: (Ord a) => [a] -> Bool
wave xs = and $ zipWith3 ($) (cycle [(<),(>)]) xs (tail xs)

我们也可以在模式上简单地对其进行参数化

waveLike :: [(a -> a -> Bool)] -> [a] -> Bool
waveLike patterns xs = and $ zipWith3 ($) (cycle patterns) xs (tail xs)

twoUpTwoDown :: (Ord a) => [a] -> Bool
twoUpTwoDown = waveLike [(<),(<),(>),(>)]

coprimeThenNotCoprime :: (Integral a) => [a] -> Bool
coprimeThenNotCoprime = waveLike [coprime, notCoprime]
where coprime m n = gcd m n == 1
notCoprime m n = not (coprime m n)

关于list - Haskell-我如何遍历和比较数组/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335777/

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