2014-02-08 23 views
0

我試圖做一個簡單的程序,發現一組點的平均距離爲0.輸入將是一組元組(即(1,2)和(2,3)),它應該從0計算每個點的距離,然後找到平均值。如何通過元組列表進行遞歸?

我理解其中的邏輯和通式(再次,它很簡單),我這裏有:

averageDist ((x,y):xs) = (sqrt((x*x)+(y*y)))/length xs 

我只是用元組的時候不明白列出的語法。正如你所看到的,我嘗試過(x,y):xs並在編譯時,ghci認爲所有的值都是不同的類型。我怎樣才能修復這個程序,以便我可以迭代並將公式應用於每個元組?

我完全是Haskell的新手,我非常感謝任何幫助。

感謝

回答

2

先寫的平均函數:

average :: [Double] -> Double 
average xs = ... 

和距離函數:

distance :: (Double,Double) -> Double 
distance (x,y) = ... 

然後你就可以連同map使用這些功能:

averageDistance :: [(Double,Double)] -> Double 
averageDistance xs = average (map distance xs) 
+0

在那兒一種使用列表理解而不是多個函數的方法? – raine

+0

這正是我要找的。我改變了一點,但我仍然遇到與類型問題有關的大錯誤?任何想法是什麼可能導致它? – raine

+0

@raine'sum [sqrt(x * x + y * y)| (x,y)< - xs]/length xs'。 –