具有由自定义类型组成的列表的操作

时间:2017-03-28 18:53:27

标签: haskell

我对Haskell很陌生,而且我正在努力解决某些问题。即,具有包含一系列自定义类型的列表。到目前为止,这就是我所在的地方:

type shots = [(Float,Float)]

value :: shots -> [Float]
value [(a,b)] = [(10-(sqrt(a^2+b^2)))]

现在,这似乎有效,但仅适用于一对浮点值。我在这里尝试做的是,放入一系列浮点数,用等式计算,然后将结果返回到浮点数列表中。我理解为什么它不再采用当前形式(因为ab),但无论我如何尝试将其用于头尾循环,它都会停止发挥作用。尝试使用fstsnd,但没有成功。

2 个答案:

答案 0 :(得分:1)

您可能也想学习构建基块。例如,您可以为一对编写函数,然后将map编写为对列表。

f (a,b) = 10 - sqrt(a^2 + b^2)

> map f [(3,4),(5,12)]
[5.0,-3.0]

或在函数的上下文中定义

value = map f
   where f (a,b) = 10 - sqrt(a^2 + b^2)

GHC可以推断出类型

> :t value
value :: Floating b => [(b, b)] -> [b]

答案 1 :(得分:0)

创建一个函数'Future' object is not callable,用于计算单个对

process

然后将该函数映射到元组列表

process (a, b) = (10-(sqrt(a^2+b^2)))

将产生

fmap process [(1,2),(3,4),(45,55)]