もしかして
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 点のペア間の距離の 3 倍 (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:[]
which は と同じよう[1,3,8]
に実行できますが、 は空のリストではなく空のタプル (型エラー) であるため1:3:8:()
に実行できません。その右側にリスト。(つまり、リストの前にすばやく追加できますが、後ろにすばやく追加することはできません。)()
[]:1:3:8
8
:
たぶん、チュートリアルに取り組み、すべての演習に答える価値があります。実際の詳細が不足している Haskell でのプログラミングの概念図を持っているようです。Learn You a Haskell for Great Goodは陽気に書かれており、アクセスしやすく、オンラインで無料で読むことができます。実際にすべての演習を行い、答えが機能するかどうかをテストすることを忘れないでください! (ghci またはハグを使用してください。) 定期的なテストとチェックにより、より速く学習できます。