gpt4 book ai didi

haskell - 编写一个构造集合的递归函数

转载 作者:行者123 更新时间:2023-12-02 16:53:55 24 4
gpt4 key购买 nike

我遇到了一个硬件问题。

Write a recursive function that constructs a set
mkSet :: Eq a => [a] −> Set a

给出的提示之一是我应该使用另一个名为 isElement 的函数来检查每个值是否有重复项。这是我的 isElement

isElement :: Eq a => a -> [a] -> Bool
isElement x [] = False
isElement x (y:xs) = if x == y then True else isElement x xs

我经常遇到的主要错误之一是每次调用 isElement 时,mkSet 中的值都会以 Bool 形式返回(我不确定我是如何做的) )。

这就是我目前的 mkSet(另请记住,我刚刚开始学习 Haskell)

mkSet :: Eq a => [a] -> Set a
mkSet x [] = isElement x (xs)

我应该做什么?

谢谢!

最佳答案

首先,我认为您使用 mkSet (x:xs) 而不是 mkSet x [],因为您使用了 xs。

您的函数“mkSet x [] = isElement x (xs)”正在调用函数isElement,该函数返回一个Bool。因此,您分配给 nkSet x [] 的是 Bool,而不是 Set a

所以你想要的是这样的:

mkSet' :: [a] -> [a]
mkSet' [] = []
mkSet' (x:[]) = [x]
mkSet' (x:xs) = if (isElement x xs) then (mkSet' xs) else (x:(mkSet' xs))

此函数为您提供一个包含唯一元素的列表。您唯一需要知道的就是将其变成一个集合。

关于haskell - 编写一个构造集合的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923498/

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