gpt4 book ai didi

Haskell - 最常见的值

转载 作者:行者123 更新时间:2023-12-01 07:11:05 25 4
gpt4 key购买 nike

如何在列表示例中获得最常见的值:

[1,3,4,5,6,6] -> output 6
[1,3,1,5] -> output 1

我试图通过我自己的功能来获得它,但我无法实现它你们可以帮助我吗?

我的代码:
del x [] = []
del x (y:ys) = if x /= y
then y:del x y
else del x ys



obj x []= []
obj x (y:ys) = if x== y then y:obj x y else(obj x ys)

tam [] = 0
tam (x:y) = 1+tam y

fun (n1:[]) (n:[]) [] =n1
fun (n1:[]) (n:[]) (x:s) =if (tam(obj x (x:s)))>n then fun (x:[]) ((tam(obj x (x:s))):[]) (del x (x:s)) else(fun (n1:[]) (n:[]) (del x (x:s)))

rep (x:s) = fun (x:[]) ((tam(obj x (x:s))):[]) (del x (x:s))

最佳答案

扩展 Satvik 的最后一个建议,您可以使用 (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c'))来自 Control.Arrow (请注意,为简单起见,我在该类型签名中替换了 a = (->))以干净地执行 decorate-sort-undecorate transform .

mostCommon list = fst . maximumBy (compare `on` snd) $ elemCount
where elemCount = map (head &&& length) . group . sort $ list
head &&& length函数的类型为 [b] -> (b, Int) .它将列表转换为其第一个元素及其长度的元组,因此当它与 group . sort 组合时您将获得列表中每个不同值的列表以及它发生的次数。

此外,您应该考虑调用 mostCommon [] 时会发生什么。 .显然没有合理的值(value),因为根本没有元素。就目前而言,所有提出的解决方案(包括我的)都只是在一个空列表上失败,这不是好的 Haskell。正常的做法是返回 Maybe a , 其中 Nothing表示错误(在本例中为空列表)和 Just a代表一个“真实的”返回值。例如
mostCommon :: Ord a => [a] -> Maybe a
mostCommon [] = Nothing
mostCommon list = Just ... -- your implementation here

这要好得多,因为从代码安全的角度来看,部分函数(对于某些输入值未定义的函数)是可怕的。你可以操纵 Maybe使用模式匹配的值(匹配 NothingJust x )和 Data.Maybe 中的函数(优选 fromMaybemaybe 而不是 fromJust )。

关于Haskell - 最常见的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13833017/

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