gpt4 book ai didi

function - 使用 Haskell 创建高阶函数

转载 作者:行者123 更新时间:2023-12-02 22:08:53 26 4
gpt4 key购买 nike

我最近一直在自学 Haskell,我的练习之一是实现一个带有两个参数的函数:一个列表和一个值。该函数将检查该值是否在列表中出现两次或多次。我无法使用函数元素或成员。

我尝试删除不等于该值的值。然后检查新列表的大小,如果大于 1,则输出 True,否则输出 False。我在尝试在函数内使用函数时遇到问题。

remove2 val [] = []
remove2 val (x:xs) = if ( not (x == val))
then remove2 val xs
else x:remove2 val xs

isMemberTwice :: (Eq val) => val -> [val] -> Bool
isMemberTwice val [] = False
isMemberTwice val (x:xs)
| ( >= (length (remove2 val [val])) 2) = True
| otherwise = a `isMemberTwice’` xs

最佳答案

高阶函数是接受另一个函数作为参数或返回另一个函数的函数。

您手头的问题可以使用简短的 recursive function: 轻松解决。

memtwice :: (Eq a) => a -> [a] -> Bool
memtwice value list = scan value list False
where scan _ [] _ = False
scan v (x:xs) True =
if v == x then True
else scan v xs True
scan v (x:xs) False =
scan v xs (v == x)

scan 是一个携带状态信息(是否已经找到一个实例)作为附加参数的函数。

可以使用诸如 fold 之类的高阶函数重写它,尽管我不确定如何实现短路行为(一旦发现两个实例就停止)。

关于function - 使用 Haskell 创建高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383771/

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