List 列表操作列表的帮助

List 列表操作列表的帮助,list,haskell,syntax,List,Haskell,Syntax,嗨,我是哈斯克尔的新手。 我正在努力做一件简单的工作 test :: (RealFloat a) => a -> a -> [a] test xs ys= [ w : h: [] | w <- xs, h <- ys] test::(RealFloat a)=>a->a->[a] test xs ys=[w:h:[]| w您需要列表连接: [12.12] ++ [14.14] => [12.12,14.14] 您需要列表连接: [12.12]

嗨,我是哈斯克尔的新手。 我正在努力做一件简单的工作

test :: (RealFloat a) => a -> a  ->  [a]  
test xs ys= [ w : h: [] | w  <- xs, h <- ys]
test::(RealFloat a)=>a->a->[a]

test xs ys=[w:h:[]| w您需要列表连接:

[12.12] ++ [14.14]

=> [12.12,14.14]

您需要列表连接:

[12.12] ++ [14.14]

=> [12.12,14.14]

您的签名错误。请尝试:

test xs ys = ...
然后在ghci中:

> :t test
test :: [t] -> [t] -> [[t]]

您需要两个参数,都是列表,而不是单个元素的两个参数。

您的签名错误。请尝试:

test xs ys = ...
然后在ghci中:

> :t test
test :: [t] -> [t] -> [[t]]

您需要两个参数,都是列表,而不是单个元素的两个参数。

Drakosha是正确的。列表串联在Haskell中已经有一个运算符

test :: (RealFloat a) => [a] -> [a]  ->  [a]  
test xs ys= xs ++ ys
在这里,您可能不想使用列表理解,除非您想提取第一个和第二个列表中的每个元素并对它们进行处理。例如,笛卡尔积:

list1 = [1.0,1.1,1.2] :: [Double]
list2 = [2.0,2.1,2.2] :: [Double]

testComps xs ys = [(x,y) | x <- xs, y <- ys]
当然,testComps2中奇怪的结果在处理浮点数时是正常的。在现实世界中,你可以通过四舍五入来补偿这一点


您将遇到的另一个问题是(++)和(:)之间的差异。简单地说,(:)将单个项目固定到列表上,而(++)将两个列表连接起来。

Drakosha是正确的。列表连接在Haskell中已经有一个运算符

test :: (RealFloat a) => [a] -> [a]  ->  [a]  
test xs ys= xs ++ ys
在这里,您可能不想使用列表理解,除非您想提取第一个和第二个列表中的每个元素并对它们进行处理。例如,笛卡尔积:

list1 = [1.0,1.1,1.2] :: [Double]
list2 = [2.0,2.1,2.2] :: [Double]

testComps xs ys = [(x,y) | x <- xs, y <- ys]
当然,testComps2中奇怪的结果在处理浮点数时是正常的。在现实世界中,你可以通过四舍五入来补偿这一点


您将遇到的另一个问题是(++)和(:)之间的差异。简单地说,(:)将单个项目固定到一个列表上,而(++)将两个列表连接起来。

[12.12]+[14.14]=[12.12,14.14]
您所说的“绑定”到底是什么意思?
[12.12]+[14.14]=[12.12,14.14]
您所说的“绑定”到底是什么意思这是错误的
测试[1,2][3,4]=[[1,3],[1,4],[2,3],[2,4]
不是
[1,2,3,4]
。基于他的话,这可能是他想要的,但他的话不清楚,而is代码是精确的。@TomMD:代码(沙式签名)是精确的,给出的结果可能是有效的,但他显然是个初学者,不知道列表理解是如何工作的。另一方面,他的例子也很清楚,他说英语的时间肯定比Haskell长;)这是错误的
测试[1,2][3,4]==[[1,3],[1,4],[2,3],[2,4]
不是
[1,2,3,4]
。根据他的话,这可能是他想要的,但他的话不清楚,而is代码是精确的。@TomMD:代码(沙型签名)是精确的,给出的结果可能是有效的,但他显然是一个初学者,不知道列表理解是如何工作的。另一方面,他的例子也很清楚,他说英语的时间肯定比Haskell长;)他希望将两个列表连接起来,而不是将它们组合成一个列表。你的签名应该是test:[t]->[t]->[t]->[t]如果他说concatenate,那么毫无疑问,但是术语
bind
对我来说是模棱两可的。无论如何,我相信他在这里是因为运行提供的代码时出现了一个类型错误-即使它不是他想要的代码,也许他会通过学习GHCi中的类型签名和
:t
受益。他正在寻找连接两个列表,不要将它们合并到列表列表中。您的签名应该是test::[t]->[t]->[t]如果他说concatenate,那么毫无疑问,但是术语
bind
对我来说是模棱两可的。无论如何,我相信他在这里是因为运行提供的代码时出现了类型错误——即使它不是他想要的代码,也许他会通过在GHCi中学习类型签名和
:t
而受益。