gpt4 book ai didi

haskell - haskell上点之间的距离

转载 作者:行者123 更新时间:2023-12-02 10:15:53 25 4
gpt4 key购买 nike

我是 Haskell 新手,我必须做一个函数,它接受一个列表并递归计算距离。

For example:
distance [(0,0),(2,0),(2,5)]
->7
distance [(1,1),(3,4)]
->3.6055512

我像这样设置了两点之间的距离

distance (x1 , y1) (x2 , y2) = sqrt 
(x'*x' + y'*y')
where
x' = x1 - x2
y' = y1 - y2

但不知道如何使用可变列表大小来实现它,谢谢

最佳答案

我们可以将此函数重命名为 distance2 以指定它计算两点之间的距离:

distance2 :: Floating a => (a, a) -> (a, a) -> a
distance2 (x1 , y1) (x2 , y2) = sqrt (x'*x' + y'*y')
where x' = x1 - x2
y' = y1 - y2

接下来我们可以利用zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]同时迭代两个列表,并对元素应用函数。这里我们迭代列表及其尾部。这将产生一个距离列表。我们可以利用sum :: (Num a, Foldable f) => f a -> a总结这些距离:

distance2 :: Floating a => [(a, a)] -> a
distance [] = 0
distance xa@(_:xs) = sum (zipWith distance2 xa xs)

关于haskell - haskell上点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58428283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com