Сообщение F#, вычисление дистанции между узлами дерева от 22.07.2019 21:29
Изменено 22.07.2019 21:30 zverjuga
F#, вычисление дистанции между узлами дерева
приветствую. засел за изучение F#. язык и подход для меня новый, все переворачивается с ног на голову, потому прошу помощи. имеется следующий код
смысле следующий. тип Stree — это дорога, представленная в виде дерева. в самом простом случае это дерево имеет вид простого списка, без ответвлений, вот его и рассматриваю.
тип Street хранит в себе узлы (предыдущий, следующий) список типов Point, которые описывают конкретный узел. Point можно рассматривать как некий атрибут, который может принимать следующие типы
Position — координата
Descriptiom — текстовое описание
Radius — радиус
Lanes — количество полос
каждый нод Street может хранить в себе произвольное количество Point
ну суть здесь не в этом. а в том, что получаю ошибку компиляции функции distance
смысл ошибки понятен, но не совсем понятно, как сказать компилятору, что тип Point на самом деле является Position. пробовал разные способы
pt1: Point(x, y)
pt1: Point(x:float, y: float)
pt1: Position
pt1: Position(x, y)
и так далее
может кто подсказать, как заставить компилятор понять, какой тип я передаю в distance?
благодарю
module Street
type Paint =
| FillColor of float
| BorderColor of float
| BorderWidth of float
type Point =
| Position of x:float * y:float
| Description of string
| Radius of float
| Lanes of uint32
type Street =
| Node of Street * Point list * Street // back * points * right. street like tree
| Empty
let distance (pt1: Point) (pt2: Point) =
let square x = x * x
sqrt <| square (pt1.x - pt2.x) + square (pt1.y - pt2.y)
смысле следующий. тип Stree — это дорога, представленная в виде дерева. в самом простом случае это дерево имеет вид простого списка, без ответвлений, вот его и рассматриваю.
тип Street хранит в себе узлы (предыдущий, следующий) список типов Point, которые описывают конкретный узел. Point можно рассматривать как некий атрибут, который может принимать следующие типы
Position — координата
Descriptiom — текстовое описание
Radius — радиус
Lanes — количество полос
каждый нод Street может хранить в себе произвольное количество Point
ну суть здесь не в этом. а в том, что получаю ошибку компиляции функции distance
Error FS0039 The field, constructor or member 'x/y' is not defined.
смысл ошибки понятен, но не совсем понятно, как сказать компилятору, что тип Point на самом деле является Position. пробовал разные способы
pt1: Point(x, y)
pt1: Point(x:float, y: float)
pt1: Position
pt1: Position(x, y)
и так далее
может кто подсказать, как заставить компилятор понять, какой тип я передаю в distance?
благодарю
F#, вычисление дистанции между узлами дерева
приветствую. засел за изучение F#. язык и подход для меня новый, все переворачивается с ног на голову, потому прошу помощи. имеется следующий код
смысл следующий. тип Stree — это дорога, представленная в виде дерева. в самом простом случае это дерево имеет вид простого списка, без ответвлений, вот его и рассматриваю.
тип Street хранит в себе узлы (предыдущий, следующий) список типов Point, которые описывают конкретный узел. Point можно рассматривать как некий атрибут, который может принимать следующие типы
Position — координата
Descriptiom — текстовое описание
Radius — радиус
Lanes — количество полос
каждый нод Street может хранить в себе произвольное количество Point
ну суть здесь не в этом. а в том, что получаю ошибку компиляции функции distance
смысл ошибки понятен, но не совсем понятно, как сказать компилятору, что тип Point на самом деле является Position. пробовал разные способы
pt1: Point(x, y)
pt1: Point(x:float, y: float)
pt1: Position
pt1: Position(x, y)
и так далее
может кто подсказать, как заставить компилятор понять, какой тип я передаю в distance?
благодарю
module Street
type Paint =
| FillColor of float
| BorderColor of float
| BorderWidth of float
type Point =
| Position of x:float * y:float
| Description of string
| Radius of float
| Lanes of uint32
type Street =
| Node of Street * Point list * Street // back * points * right. street like tree
| Empty
let distance (pt1: Point) (pt2: Point) =
let square x = x * x
sqrt <| square (pt1.x - pt2.x) + square (pt1.y - pt2.y)
смысл следующий. тип Stree — это дорога, представленная в виде дерева. в самом простом случае это дерево имеет вид простого списка, без ответвлений, вот его и рассматриваю.
тип Street хранит в себе узлы (предыдущий, следующий) список типов Point, которые описывают конкретный узел. Point можно рассматривать как некий атрибут, который может принимать следующие типы
Position — координата
Descriptiom — текстовое описание
Radius — радиус
Lanes — количество полос
каждый нод Street может хранить в себе произвольное количество Point
ну суть здесь не в этом. а в том, что получаю ошибку компиляции функции distance
Error FS0039 The field, constructor or member 'x/y' is not defined.
смысл ошибки понятен, но не совсем понятно, как сказать компилятору, что тип Point на самом деле является Position. пробовал разные способы
pt1: Point(x, y)
pt1: Point(x:float, y: float)
pt1: Position
pt1: Position(x, y)
и так далее
может кто подсказать, как заставить компилятор понять, какой тип я передаю в distance?
благодарю