Публикации по теме '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 просмотров
schedule
31.03.2022
Определение новых типов данных в схеме
Сначала мне нужно упомянуть, что я новичок в Scheme, и поэтому следующий вопрос может не иметь особого смысла.
В школе мы определили алгебраические типы данных , которые обычно имеют конструктор с нулевым значением, а также некоторые внутренние /...
3664 просмотров
schedule
31.07.2022
Алгебраические типы данных Clojure
Я нашел макрос defadt в clojure.contrib. типы . К сожалению, полезной документации по использованию ADT в clojure нет. Я часами гуглил и нашел крошечные фрагменты информации об этом. Что такое ADT в clojure? Как их использовать? Любая...
2128 просмотров
schedule
18.01.2023
Общие преобразования типов в Haskell
Я пытаюсь написать преобразователь arrow , который принимает обычные функции и превращает их в вычисления абстрактных значений. . Если у нас есть стрелка «источник»,
f :: Int -> Int
f x = x + 1
то целью будет заставить f работать с...
487 просмотров
schedule
31.10.2023
Автоматическое применение функции к подструктурам
Предположим, я пишу «замещающую» функцию для типа данных абстрактного синтаксического дерева:
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 просмотров
schedule
09.04.2022
Дизайн типов данных в 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 просмотров
schedule
10.05.2024
Как создать распакованный экземпляр 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 просмотров
schedule
29.01.2023
список типов данных 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 просмотров
schedule
18.03.2023
Анонимный тип записи внутри размеченного объединения
Учебник по 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 просмотров
schedule
24.02.2024
Алгебраические манипуляции в C
Прямо сейчас я ищу код программы, которая может выполнять базовую линейную алгебру, где у меня есть 2 константы: A и B, где я могу просто ввести их коэффициенты и добавить к ним другие значения.
Пример:
Скажем, я хотел найти члены...
110 просмотров
schedule
15.06.2022
Использование синтаксиса записи с алгебраическими типами данных с несколькими конструкторами
Следующий тип данных является представлением фосфатидной кислоты (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 просмотров
schedule
27.04.2024
Внедрение алгебраических типов данных в мой компилятор
Я пытался написать небольшой компилятор в течение последних нескольких недель, читая отличный учебник Стивена Диля «Напиши тебе на Haskell». В настоящее время я пишу интерпретатор, прежде чем писать компилятор.
У меня есть проблемы с...
464 просмотров
schedule
09.10.2022