Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
Function 在函数中使用变量_Function_Variables_Haskell_Functional Programming - Fatal编程技术网

Function 在函数中使用变量

Function 在函数中使用变量,function,variables,haskell,functional-programming,Function,Variables,Haskell,Functional Programming,假设我有一个名为“Coord”的数据类型,其定义如下: type Coord a = [(Int, Int)] 我想创建一个类型为“Coord”的变量,用于下面的函数中。该函数接受Coord类型的变量,并将列表中每个项的x坐标乘以2。然后,它将这些新坐标存储在一个新的Coord变量中;我不知道如何创建/声明/使用我想要返回的这个新变量 foo :: (Eq a) => Coord a -> Coord a 这是对列表中的每个元素执行操作的手动方式: type Coord = [(

假设我有一个名为“Coord”的数据类型,其定义如下:

type Coord a = [(Int, Int)]
我想创建一个类型为“Coord”的变量,用于下面的函数中。该函数接受Coord类型的变量,并将列表中每个项的x坐标乘以2。然后,它将这些新坐标存储在一个新的Coord变量中;我不知道如何创建/声明/使用我想要返回的这个新变量

foo :: (Eq a) => Coord a -> Coord a

这是对列表中的每个元素执行操作的手动方式:

type Coord = [(Int, Int)]

multiplyXBy2 :: Coord -> Coord
multiplyXBy2 [] = []
multiplyXBy2 ((x, y):rest) = (x*2, y) : multiplyXBy2 rest
下面是通过ghci进行的调用:

*Main> multiplyXBy2 [(1,2), (3,4)]
[(2,2),(6,4)]

对于使用语言的基本知识,例如如何访问传递到函数中的列表元素或如何以编程方式构建列表,请考虑以下教程,如LyAh或RWH的

如何创建第一个COORD变量?不应该是“代码>类型COORD A=((a,a))< /代码>吗?或者
newtype-Coord a=Coord[(a,a)]
@DarrelGulseth:但是我不明白为什么(a)您使用
a
类型参数,因为它没有在
type
子句的“body”中使用,以及(b)为什么添加
Eq
约束。@DarrelGulseth“好吧,如果我接受坐标中的任何类型,那么是的,但我只想要整数”那么你不需要
a
。应该是
typecoord=[(Int,Int)]
@DarrelGulseth我知道
typecoord a=[(Int,Int)]
。里面有一个
a
,除非你接受任何类型,否则它对你没有任何用处。可能更“高级”(虽然不是真的),但你可以将它定义为
multilyxby2=map(\(x,y)->(2*x,y))
。甚至
multilyxby2=(map.first)(*2)
(如果您
导入控件.Arrow
)。