Публикации по теме 'algebraic-data-types'


Алгебраические типы данных и моделирование данных
Алгебраические типы данных предоставляют нам еще один интересный способ выражения концепций в коде, давайте посмотрим, как они могут помочь. Программирование - это композиция. Обычно мы решаем сложную проблему, разбивая ее на более мелкие и более понятные задачи, которые затем составляются вместе, будь то функции, объекты и т. Д. Попутно возникают интересные проблемы, когда мы вводим новые типы для выражения концепции в нашем коде, будь то конкретная или абстрактная. И это как раз..

Алгебраические типы данных
Последний лайм я остановил перед главой enum. Сегодня догоняю. Как оказалось, из всех возможностей, которые я изучил до сих пор, перечисления, или, если быть точнее, алгебраические типы данных, являются второй наиболее интересной функцией в Rust после модели владения / заимствования, запеченной в компиляторе. Это потрясающе. Это вызывает у меня такое же ощущение, как когда моя первая программа на Basic работала без ошибок на моем компьютере ZX-Spectrum. Это радость от возможностей и..

Алгебраические типы в C ++ 17
В функциональных языках алгебраические типы являются важной частью взаимодействия с пользователем и, на мой взгляд, наиболее полным и минимальным способом определения структур данных. В Coq определение полиморфного списка выглядит так: Inductive list {T} := | nil: @list T | cons: T -> @list T -> @list T. Что сообщает нам все, что нам нужно знать о списках; Они могут быть пустыми (ноль) Или они могут содержать элемент (голова) и другой список (хвост) Определение списка..

ADT и даже помеченные союзы не очень распространены в Javascript.
ADT и даже помеченные союзы не очень распространены в Javascript. Я создал подключаемую программу проверки типов во время выполнения, которая поддерживает типобезопасные ADT, закодированные Скоттом. Вот небольшой набросок: import * as F from ".../ftor.js"; F.type(true); const List = F.Adt( function List() {}, "(List :: ({Cons: (a -> List<a> -> r), Nil: r} -> r) -> List<a>)" ); const Nil = List(cases => cases.Nil); const Cons = x => tx..

Краткое введение в алгебру типов
Довольно часто встречаются разговоры и статьи об алгебраических типах данных, такие вещи, как сумма и типы продуктов, становятся популярными в настоящее время в основных языках программирования. Итак, давайте попробуем понять, о чем они. Заявление об ограничении ответственности: этот пост представляет собой краткое введение в тему с точки зрения разработки программного обеспечения, учитывая, что я инженер-программист, а не математик. Поэтому я не буду слишком углубляться в..

Вопросы по теме 'algebraic-data-types'

Алгебраические типы данных Haskell
Я пытаюсь полностью понять все концепции Haskell. Чем алгебраические типы данных похожи на универсальные типы, например, в C # и Java? А чем они разные? Что вообще в них такого алгебраического? Я знаком с универсальной алгеброй, ее кольцами и...
16094 просмотров

Определение новых типов данных в схеме
Сначала мне нужно упомянуть, что я новичок в Scheme, и поэтому следующий вопрос может не иметь особого смысла. В школе мы определили алгебраические типы данных , которые обычно имеют конструктор с нулевым значением, а также некоторые внутренние /...
3664 просмотров

Алгебраические типы данных Clojure
Я нашел макрос defadt в clojure.contrib. типы . К сожалению, полезной документации по использованию ADT в clojure нет. Я часами гуглил и нашел крошечные фрагменты информации об этом. Что такое ADT в clojure? Как их использовать? Любая...
2128 просмотров
schedule 18.01.2023

Общие преобразования типов в Haskell
Я пытаюсь написать преобразователь arrow , который принимает обычные функции и превращает их в вычисления абстрактных значений. . Если у нас есть стрелка «источник», f :: Int -> Int f x = x + 1 то целью будет заставить f работать с...
487 просмотров

Автоматическое применение функции к подструктурам
Предположим, я пишу «замещающую» функцию для типа данных абстрактного синтаксического дерева: data Term = Id String | If Term Term Term | Let String Term Term ... subst :: String -- name of identifier to replace...
158 просмотров
schedule 09.01.2023

Предоставляет ли Opa алгебраические типы данных?
Я пытаюсь глубже понять концепции Opa . В частности, меня интересует решение не предоставлять размеченные объединения, как в ML или Haskell (т. е. определять несколько конструкторов, которые оборачивают ноль или более значений), а оставаться с...
151 просмотров
schedule 15.10.2022

Как вы представляете граф в Haskell?
Достаточно легко представить дерево или список в haskell, используя алгебраические типы данных. Но как бы вы представили график типографически? Похоже, вам нужны указатели. Я предполагаю, что у вас может быть что-то вроде type Nodetag = String...
33442 просмотров

Дизайн типов данных в Haskell
Что вы предлагаете: data Direction = Left | Right type Direction = Bool newtype Direction = Direction Bool Затем я делаю: data Move = WalkRight Bool | Jump or data Move = Walk Direction | Jump в зависимости от предыдущего...
374 просмотров
schedule 26.03.2022

Проблемы с пониманием системы типов Haskell
Сейчас я пытаюсь выполнить 20 промежуточных упражнений на Haskell . Мне удалось выполнить первые три упражнения (но это потому, что furry == fmap и Learn You a Haskell уже имеют эти реализации) . В настоящее время я застрял на экземпляре,...
850 просмотров

Как создать распакованный экземпляр ADT?
У меня возникли проблемы с поиском хороших ресурсов, которые помогут сделать мои типы данных распакованными для использования в распакованном векторе. Как бы я сделал тип данных data Color = Yellow | Red | Green | Blue | Empty deriving (Show,...
959 просмотров
schedule 26.06.2022

Символические типы C и типы непересекающихся объединений?
Отказ от ответственности: я программист на Haskell, изучаю C. В Haskell у нас есть объявления данных, такие как data No = NO где NO не имеет никакой интерпретации как число. Если бы у нас было что-то эквивалентное в C, мы могли бы сделать...
530 просмотров

список типов данных haskell с ограничениями
У меня есть следующие определения типов для представления карт: data Suit = Hearts | Spades | Diamonds | Clubs data Rank = Numeric Integer | Jack | Queen | King | Ace data Card = Card Rank Suit data Deck = None | Cons Card Deck Числовое целое...
481 просмотров
schedule 06.04.2022

Как вы эмулируете ADT и сопоставление с образцом в TypeScript?
К сожалению, начиная с 0.9.5, TypeScript (пока) не имеет алгебраических типов данных (типов объединения) и сопоставления с образцом (чтобы их деструктурировать). Более того, он даже не поддерживает instanceof на интерфейсах. Какой шаблон вы...
3679 просмотров

Анонимный тип записи внутри размеченного объединения
Учебник по F# включает следующий фрагмент: /// A record for a person's first and last name type Person = { First : string Last : string } /// define a discriminated union of 3 different kinds of employees type Employee = |...
1508 просмотров
schedule 28.05.2022

Рекурсивные алгебраические типы данных через полиморфизм в Haskell
Я пытаюсь понять определение, декодирование и кодирование рекурсивных алгебраических типов данных с учетом функциональности универсального полиморфизма. В качестве примера я попытался реализовать рекурсивный тип двоичных деревьев через data BTAlg...
246 просмотров

Алгебраические манипуляции в C
Прямо сейчас я ищу код программы, которая может выполнять базовую линейную алгебру, где у меня есть 2 константы: A и B, где я могу просто ввести их коэффициенты и добавить к ним другие значения. Пример: Скажем, я хотел найти члены...
110 просмотров

Использование синтаксиса записи с алгебраическими типами данных с несколькими конструкторами
Следующий тип данных является представлением фосфатидной кислоты (PA - подкласс липидов). Используя масс-спектрометрию, можно получить различные уровни структурной детализации (например, от простого знания массы липида до получения полной структурной...
500 просмотров
schedule 30.05.2023

Алгебраические типы данных в TypeScript
Другими словами : Как бы вы набрали свойство windowState DOM в TypeScript? РЕШЕНО (в TypeScript 2) : declare var windowState: WindowState const enum WindowState { STATE_MAXIMIZED = 1, STATE_MINIMIZED = 2, STATE_NORMAL = 3,...
8682 просмотров
schedule 30.05.2022

Использование MonadRandom с MonadState
У меня есть этот бит кода: import Data.Random import Control.Monad.State foo :: s -> StateT s RVar () foo s = do p <- lift $ (uniform 0 1 :: RVar Double) if p > 0.5 then put s else return () И я хотел бы реорганизовать его...
152 просмотров

Внедрение алгебраических типов данных в мой компилятор
Я пытался написать небольшой компилятор в течение последних нескольких недель, читая отличный учебник Стивена Диля «Напиши тебе на Haskell». В настоящее время я пишу интерпретатор, прежде чем писать компилятор. У меня есть проблемы с...
464 просмотров