powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Haskell: вопросы
25 сообщений из 123, страница 4 из 5
Haskell: вопросы
    #39644043
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробовал определить новый тип с Show. Это треш какой-то. Как понять код ошибки?
Неужели я должен обойти over 9000 синтаксических форм чтоб выбрать одну единственно
правильную?

Код: sql
1.
newtype Vector = Double Double Double deriving (Show,Eq)



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Prelude> :l card.hs
[1 of 1] Compiling Main             ( card.hs, interpreted )

card.hs:27:18: error:
    * The constructor of a newtype must have exactly one field
        but `Double' has two
    * In the definition of data constructor `Double'
      In the newtype declaration for `Vector'
   |
27 | newtype Vector = Double Double Double deriving (Show,Eq)
   |                  ^^^^^^^^^^^^^^^^^^^^



тебя же вроде просто вектор устраивал. а там show уже реализован.
а так то, ты сам newtype неправильно записал. я же выше примел давал.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644044
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNа так то, ты сам newtype неправильно записал. я же выше примел давал.
Код: sql
1.
newtype Vector = Vector (Double, Double, Double)
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644052
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... значит я пока в поиске.

Если сделать так

Код: sql
1.
newtype Vector = Vector (Double, Double, Double) deriving (Show, Eq)


то компилляция Вектора проходит норм. Но не собирается например функция скалярного произведения.
Код: sql
1.
2.
3.
4.
5.
6.
7.
    * Couldn't match expected type `Vector'
                  with actual type `(Double, Double, Double)'
    * In the pattern: (x2, y2, z2)
      In an equation for `sprod':
          sprod (x1, y1, z1) (x2, y2, z2) = x1 * x2 + y1 * y2 + z1 * z2
   |
36 | sprod (x1, y1, z1) (x2, y2, z2) = x1 * x2 + y1 * y2 + z1 * z2


Не знаю масштабов разрушения дальше...

Если я вернусь обратно к тапл-определению вектора то алгебра векторов компилится нормально.
Код: sql
1.
type Vector = (Double, Double, Double)


Но я снова буду определять tostring(..).
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644054
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо я снова буду определять tostring(..).
зачем, если для кортешей уже реализована show?
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644055
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonто компилляция Вектора проходит норм. Но не собирается например функция скалярного произведения.
логично.
ибо тогда так функция должна выглядеть, я выше писал:
21406334
ZyK_BotaNmaytonпропущено...

А по перформансу есть какие-то рекомендации?
разницы не должно быть.
но если хочешь, что-бы туплы с векторами тайпчекером различались, то вот так пиши:
Код: sql
1.
2.
3.
4.
newtype Vector = Vector (Double, Double, Double)

summation :: Vector -> Vector -> Vector
summation (Vector (x1, y1, z1)) (Vector (x2, y2, z2)) = Vector(x1 + x2, y1 + y2, z1 + z2)
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644056
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNлогично.
ибо тогда так функция должна выглядеть, я выше писал:
т.е.
Код: sql
1.
sprod (Vector (x1, y1, z1)) (Vector (x2, y2, z2)) 
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644058
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... я предполагал что такой спул
Код: sql
1.
(2.0, 3.0, 4.0) (5.0,7.0,9.0) 


тестировать проще чем просто поток Double чисел. Да и вообще я
всегда так поступал с ::toString() или сериализацией. Я определял
свой формат сущности для удобства ее поиска в логе или текстовой
строке. В некоторых случаях это мог быть JSON. Но чаще всего
это просто идентификактор сущности и в скобках значение кортежа.

Поэтому мне важно было определить формат.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644059
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоэтому мне важно было определить формат.
тебе не подходит стандартный show для кортежа?
ну тогда таки делай ньютайп и я тебя научу делать кастомные "имплементации" тайпклассов в хаскеле.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644060
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сегодня я пас. Надо как-то это все переосмыслить.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644061
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа сегодня я пас. Надо как-то это все переосмыслить.
ты же в Киеве? можно будет и где-то в пивбаре встретиться.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будет евент. Java Day или Scala Day - тогда можно.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644063
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonScala Day
если ты скалу шаришь, то должен и в хаскеле многое понимать (:
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644670
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем чтоб я как буриданов ослик не стоял меж двух (трех) вариантов.
1) data Vector
2) type Vector (tuple)
3) newtype Vector

Можно резюмировать что есть что? По сути я ищу best practices для аналога struct из "C++".
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644671
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВобщем чтоб я как буриданов ослик не стоял меж двух (трех) вариантов.
1) data Vector
2) type Vector (tuple)
3) newtype Vector

Можно резюмировать что есть что? По сути я ищу best practices для аналога struct из "C++".
ты четвертое забыл - рекорды.
они и будут аналогом структур из с++, ибо емеют геттеры с именами полей.

а бест практик в хаскеле, либо дата, либо если альтернативных конструкторов нет, то можно и ньютайп.
рекорды тоже часто используют, особенно если полей много.


з.ы. а я всегда data юзаю, не заморачиваясь.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644673
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чорт с ним. Давай data.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644674
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧорт с ним. Давай data.
ну я уже их написал, вот так выглядят:
Код: sql
1.
2.
3.
4.
5.
6.
7.
data Vector = Vector { x :: Double
					 , y :: Double
					 , z :: Double
					 } deriving (Show, Eq)

sum' :: Vector -> Vector -> Vector
sum' v1 v2 = Vector ((x v1) + (x v2)) ((y v1) + (y v2)) ((z v1) + (z v2))
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644675
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonScala Day
если ты скалу шаришь, то должен и в хаскеле многое понимать (:
У меня нет энтерпрайзного опыта в Scala. Просто хобби.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN, а зачем апостроф после sum' ?
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644679
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавай data.
вот:
Код: sql
1.
2.
3.
4.
data Vector = Vector Double Double Double deriving (Show, Eq)

sum' :: Vector -> Vector -> Vector
sum' (Vector x1 y1 z1) (Vector x2 y2 z2) = Vector (x1 + x2) (y1 + y2) (z1 + z2)
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644680
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaN, а зачем апостроф после sum' ?
так как в модуле Prelude уже функция с таким именем есть.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644681
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonZyK_BotaN, а зачем апостроф после sum' ?
так как в модуле Prelude уже функция с таким именем есть.
а модуль сей, загружается в ghci по умолчанию и перекрывает нашу сумму.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644682
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNпропущено...

если ты скалу шаришь, то должен и в хаскеле многое понимать (:
У меня нет энтерпрайзного опыта в Scala. Просто хобби.
ну что такое case class знаешь?
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644683
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonZyK_BotaN, а зачем апостроф после sum' ?
так как в модуле Prelude уже функция с таким именем есть.
Ааа... круть. Просто привых alpha-num в идентификаторах использовать. Непривычно.
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644685
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonZyK_BotaNпропущено...

так как в модуле Prelude уже функция с таким именем есть.
Ааа... круть. Просто привых alpha-num в идентификаторах использовать. Непривычно.
в хаскеле апостроф - является нормой для объявления новых функций(или переменных констант) с тем же именем.
причем апострофы можно наращивать по наростающей.

x = ...
x' = f x
x'' = g x'
x''' = k x''
и так далее.

и в рекурсии вот так можно использовать:

f x = let x' = e x
in f x'
...
Рейтинг: 0 / 0
Haskell: вопросы
    #39644688
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonпропущено...

У меня нет энтерпрайзного опыта в Scala. Просто хобби.
ну что такое case class знаешь?
Почитал. Теперь знаю. :) Портирование трассировщика луча на Scala - кст. тоже задача.
Я ее завершил но остались баги.
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 4 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Haskell: вопросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]