Я новичок в программировании, и у меня возникли проблемы с решением задачи.
Я должен использовать функцию. В этом случае я должен реализовать его на треугольнике.
Я пробовал разные вещи, но я просто получаю ошибки, и поэтому я хотел бы обратиться за помощью.
data Triangle = Triangle {
tP1 :: Point,
tP2 :: Point,
tP3 :: Point}
deriving (Show)
Я думаю, что, возможно, translatePol
должен иметь тип p -> VectorD -> p
.
Однако это проще, если вы сначала напишете экземпляр для Point
(хотя для этого потребуется использовать data
вместо type
); вы можете использовать это, чтобы построить новый треугольник, переводя каждую точку отдельно.
Вы забыли написать конструктор MTriangle
при создании нового треугольника
Во-первых, точки и векторы — это два отдельных понятия, и, вероятно, они должны быть разными типами, а не просто двумя разными псевдонимами для двух кортежей.
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
Вы должны вернуть один
Point
, который является просто кортежем(x, y)
. Что такоеx
и что такоеy
, если дан треугольник и вектор?