[英]data types in haskell programming
它是一个haskell代码,用于查找列表中的第一个重复元素。 如果你有两个这样的列表:L1 = {1,2,3,4} L2 = {1,2,3,1}那么第一个的结果将是没有找到重复,第二个的结果应该是整数1.如果列表有L3 = {1,2,1,3,3}答案应该仍然是1。
我试过这样做,但坚持条件检查:我们将使用union数据类型。
data Res a = DuplicateFound a | NoDuplicateFound
deriving (Show,Eq)
findDuplicate [] = NoDuplicateFound
findDuplicate (x:xs) = if (condition???)
where
aux x [] = NoDuplicateFound
aux x (y:ys) = if x == y then DuplicateFound x
else aux x ys
else NoDuplicateFound
我知道这是一个可怜的代码..请帮助我改进它。
关键是,通常是递归。
列表包含重复项,如果:
除此之外,空列表不包含重复项,而且还有您的程序。
(我让hasElement只返回一个Bool,并使用Maybe a作为返回值。)
这段代码是一个好的开始。 您已编写的aux
函数会搜索元素是否在列表中。 现在你只需要检查第一个元素与列表的其余部分,如果失败,那么第二个元素将针对其后的所有元素,等等。
我只是将aux
重命名为hasElement
(永远不要低估一个好名字的澄清能力):
hasElement x [] = NoDuplicateFound
hasElement x (y:ys) = if x == y then DuplicateFound x
else hasElement x ys
然后:
findDuplicate [] = NoDuplicateFound
findDuplicate (x:xs) =
case hasElement x xs of
DuplicateFound dup -> ...
NoDuplicateFound -> ...
我会让你填写...
s。 祝你好运,感谢你在来这里寻求帮助前尝试解决方案。 这让我更愿意为我的答案付出努力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.