gpt4 book ai didi

Haskell:在 N 变量上调用两个变量的函数

转载 作者:行者123 更新时间:2023-12-02 16:46:05 25 4
gpt4 key购买 nike

对两个以上变量调用两个变量函数的最佳方法是什么?

例如,给定函数 max

Prelude> :t max
max :: Ord a => a -> a -> a

如果我想要变量x,y,z的最大值,我可以调用

max (max x y) z

但对于大量元素来说它很冗长。

一种方法是在列表上递归地执行此操作(使用“Learn You a Haskell for Great Good”中的示例

maximum :: Ord x => [x] -> x; 
maximum [] = error "maximum of empty list"
maximum (x:[]) = x
maximum (x:xs) = max x (maximum(xs))

因此,使用这个我必须创建一个数组,然后创建一个像这样的函数来对数组进行操作。有更好的方法吗?

最佳答案

您所说的模式不是“对数组进行操作的函数”,只是一种常见的递归模式。

当然还有处理递归模式的函数,例如fold。
然后你的最大函数可以被重新定义为,

maximum xs = foldl' max 0 xs -- assuming all the value are upper than 0.   

如果对列表值的限制困扰,您可以使用 Foldl'、foldl1' 的变体,它将用列表的第一个元素替换种子(0 上)。

maximum xs = foldl1' max xs

几乎每个递归结构都是可折叠的(列表、树、图...)。
但它们是其他递归模式,可以使用映射或过滤器来利用。

无论如何,这是关于使用折叠进行递归的一个很好的介绍,
A tutorial on the universality and expressiveness of fold

关于Haskell:在 N 变量上调用两个变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475676/

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