我对Haskell很陌生,而且我正在努力解决某些问题。即,具有包含一系列自定义类型的列表。到目前为止,这就是我所在的地方:
type shots = [(Float,Float)]
value :: shots -> [Float]
value [(a,b)] = [(10-(sqrt(a^2+b^2)))]
现在,这似乎有效,但仅适用于一对浮点值。我在这里尝试做的是,放入一系列浮点数,用等式计算,然后将结果返回到浮点数列表中。我理解为什么它不再采用当前形式(因为a
和b
),但无论我如何尝试将其用于头尾循环,它都会停止发挥作用。尝试使用fst
和snd
,但没有成功。
答案 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)]