Задача перевода Haskell

Я новичок в программировании, и у меня возникли проблемы с решением задачи.

Я должен использовать функцию. В этом случае я должен реализовать его на треугольнике.

Я пробовал разные вещи, но я просто получаю ошибки, и поэтому я хотел бы обратиться за помощью.

data Triangle = Triangle {
  tP1 :: Point,
  tP2 :: Point,
  tP3 :: Point}
  deriving (Show)



Вы должны вернуть один Point, который является просто кортежем (x, y). Что такое x и что такое y, если дан треугольник и вектор?

chepner 18.11.2022 19:15

Я думаю, что, возможно, translatePol должен иметь тип p -> VectorD -> p.

chepner 18.11.2022 19:16

Однако это проще, если вы сначала напишете экземпляр для Point (хотя для этого потребуется использовать data вместо type); вы можете использовать это, чтобы построить новый треугольник, переводя каждую точку отдельно.

chepner 18.11.2022 19:17

Вы забыли написать конструктор MTriangle при создании нового треугольника

user253751 19.11.2022 05:43
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
4
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, точки и векторы — это два отдельных понятия, и, вероятно, они должны быть разными типами, а не просто двумя разными псевдонимами для двух кортежей.

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

Другие вопросы по теме