我是編程新手,在解決任務時遇到問題。
我必須使用該translatePol函式將多邊形的每個點移動一個向量。在那種情況下,我必須在三角形上實作它。
我嘗試了不同的方法,但我只是遇到錯誤,這就是我想尋求幫助的原因。
type Point = (Float, Float)
type Vector = (Float, Float)
data PointD = MPoint Float Float
data VectorD = MVector Float Float
class Polygon p where
translatePol :: p -> VectorD -> Point
data Triangle = MTriangle {
tP1 :: Point,
tP2 :: Point,
tP3 :: Point}
deriving (Show)
問題: 我不知道如何撰寫以下實體:
instance Polygon Triangle where
translatePol (MTriangle tP1 tP2 tP3) (MVector v1 v2)
= (tP1 v1,tP1 v2) (tP2 v1,tP2 v2) (tP3 v1,tP3 v2)
uj5u.com熱心網友回復:
首先,點和向量是兩個獨立的概念,可能應該是不同的型別,而不僅僅是二元組的兩個不同別名。
data Point = Pt Float Float
data Vector = V Float Float
其次,您的型別類似乎抓住了使用相同向量轉換點集合的想法。回傳型別應與第一個引數型別相同,而不是硬編碼為Point.
class Polygon p where
translatePol :: p -> VectorD -> p
現在您可以從簡單開始,并為 定義一個Polygon實體Point。(將點視為退化的多邊形。)
instance Polygon Point where
translatePol (Pt x y) (Mvector v1 v2) = Pt (x v1) (y v2)
這可以用于Triangle更簡單地定義實體。
instance Polygon Triangle where
translatePol (MTriangle p1 p2 p3) v = MTriangle (t p1) (t p2) (t p3)
where t p = translatePol p v
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536668.html
標籤:哈斯克尔
上一篇:一般四邊形的Haskell面積
