gpt4 book ai didi

Haskell - 过滤最后一个元素

转载 作者:行者123 更新时间:2023-12-03 14:07:55 24 4
gpt4 key购买 nike

我想过滤不满足属性的列表的最后一个元素。一个例子是

smallerOne :: a->Bool 
smallerOne x = x < 1

函数 filterLast 应该给出
filterLast smallerOne [1, -2, -3, -4, 5] 
[1, -2, -3, -4] //Filters the last element that is not smaller than 1

这是我的代码(我是初学者,对于错误的尝试感到抱歉)
filterLast :: (a -> Bool) -> [a] -> [a] 
filterLast p [] = []
filterLast p xs
| p (last xs) = filterLast p (init xs) : last xs
| otherwise = init xs

感谢您的帮助

最佳答案

将导致 filterLast 的最小变化编译就是使用(++)而不是 (:) ,如:

filterLast p xs 
| p (last xs) = filterLast p (init xs) ++ [last xs]

(其他行保持不变。) (:)函数专门用于在列表的开头放置一个额外的元素,这不是您在这里想要做的。对于 smallerOne ,您可以简单地按照错误消息建议的方式更改类型签名,因此:
smallerOne :: (Num a, Ord a) => a->Bool

关于Haskell - 过滤最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864951/

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