Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在haskell中分离元素并返回_Haskell - Fatal编程技术网

在haskell中分离元素并返回

在haskell中分离元素并返回,haskell,Haskell,我需要实现一个Haskell函数,它以(U“NAME”,I“Item NAME”,INT_这里)的形式获取元素列表,并返回每个元素的“Item NAME”部分,但是我只想返回每个不同的“Item NAME”一次,如果重复,我已经实现了该函数(dis::Eq a=>[a]->[a])只过滤列表中的不同值 例如,对于此输入: stackOverFlowFunction [(U "John" , I "GTX 1070", 5), (U "Ahmed"

我需要实现一个Haskell函数,它以
(U“NAME”,I“Item NAME”,INT_这里)
的形式获取元素列表,并返回每个元素的“Item NAME”部分,但是我只想返回每个不同的“Item NAME”一次,如果重复,我已经实现了该函数
(dis::Eq a=>[a]->[a])
只过滤列表中的不同值

例如,对于此输入:

stackOverFlowFunction [(U "John" , I "GTX 1070", 5), 
                       (U "Ahmed" , I "Lenovo Y5070", 3), 
                       (U "Carole" , I "Honda Civic", 5), 
                       (U "Nada" , I "Honda Civic", 4),
                       (U "Ahmed" , I "GTX 1070", 1)]
它应该会回来

[I "GTX 1070", I "Lenovo Y5070", I "Honda Civic"]

函数接受一个列表,但只返回一个值。按原样,您需要递归将提取的值添加到其余此类值的列表中

stackOverflowFunction [] = []
stackOverflowFunction ((b,a,c):xs) = a : stackOverflowFunction xs
但是,这只是复制了
map
函数实现的递归方案:

extract :: (b, a, c) -> a
extract (_, a, _) = a

stackOverflowFunction :: [(b, a, c)] -> [a]
stackOverflowFunction xs = dis (map extract xs)
-- stackOverflowFunction xs = dis (map (\(_,a,_) -> a) xs)
有了这些,

>>> extract (U "John" , I "GTX 1070", 5)
I "GTX 1070"
>>> stackOverflowFunction [(U "John" , I "GTX 1070", 5), (U "Ahmed" , I "Lenovo Y5070", 3), (U "Carole" , I "Honda Civic", 5), (U "Nada" , I "Honda Civic", 4),(U "Ahmed" , I "GTX 1070", 1)]
>>> [I "GTX 1070",I "Lenovo Y5070",I "Honda Civic"]

(假定您的
dis
功能的输出。)

您需要的是一个稍微修改的:

这给了

> nubI [(U "John" , I "GTX 1070", 5), (U "Ahmed" , I "Lenovo Y5070", 3), (U "Carole" , I "Honda Civic", 5), (U "Nada" , I "Honda Civic", 4),(U "Ahmed" , I "GTX 1070", 1)]
[I "GTX 1070",I "Lenovo Y5070",I "Honda Civic"]

功能强大!你试过什么?stackOverFlowFunctionn::Eq a=>[(b,a,c)]->[a]stackOverFlowFunctionn((b,a,c):xs)=如果统一会给出无限类型的ErrorErrorError-未定义的数据构造函数“I”,那么它应该来自哪里?你的输入意味着它已经被定义了。我的坏忘记了包括声明,递归方法工作得很好,很多感谢这是完美的,不知道nub,所以现在我也不需要我的独特的助手,谢谢!
> nubI [(U "John" , I "GTX 1070", 5), (U "Ahmed" , I "Lenovo Y5070", 3), (U "Carole" , I "Honda Civic", 5), (U "Nada" , I "Honda Civic", 4),(U "Ahmed" , I "GTX 1070", 1)]
[I "GTX 1070",I "Lenovo Y5070",I "Honda Civic"]