你的意思是
ver :: (Float,Float)->(Float,Float)->(Float,Float)->(Float,Float,Float)
ver x y z = (g,g1,g2) where
g=sqrt((((fst x -fst y)^2)+((snd x -snd y)^2)))
g1=sqrt((((fst x -fst z)^2)+((snd x -snd z)^2)))
g2=sqrt((((fst y -fst z)^2)+((snd y -snd z)^2)))
來編譯,並給出
> ver (1,1) (4,-3) (8,0)
(5.0,7.071068,5.0)
對作爲參數給出的三點之間的距離
...三(3元組)。
「裸體表達式」錯誤意味着你在一行不是函數的東西 - 你的最後一行。相反,我用where
介紹你中間計算,但我也可以同樣使用了let ... in ...
:
ver' :: (Float,Float)->(Float,Float)->(Float,Float)->(Float,Float,Float)
ver' x y z = let
g=sqrt((((fst x -fst y)^2)+((snd x -snd y)^2)))
g1=sqrt((((fst x -fst z)^2)+((snd x -snd z)^2)))
g2=sqrt((((fst y -fst z)^2)+((snd y -snd z)^2)))
in (g,g1,g2)
記號():g++g1++g2
看起來像你有元組和列表有點混亂。您可以從空列表中構建列表,但不能構建元組。
例如,你可以做1:3:8:[]
這是一樣的[1,3,8]
,但你不能這樣做,因爲1:3:8:()
是()
空的元組,而不是空的列表(類型錯誤),你不能這樣做,因爲[]:1:3:8
8
不是一個清單,:
需要一個清單的權利它。 (這意味着你可以如此迅速地快速添加到列表的前面,而不是後面。)
也許這是值得你通過教程的學習,回答所有練習 - 你似乎有一個Haskell編程的概念性圖片在實際的細節上很短。我可以推薦Learn You a Haskell for Great Good這是愉快地寫,可訪問,你可以免費在線閱讀。只記得實際上做所有的練習,並且測試你的答案工作! (使用ghci或擁抱。)通過定期測試和檢查,您將學得更快。