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


Алгебраические типы данных и их общее представление в Scala
Суть программирования состоит в том, чтобы кодировать, декодировать и эффективно манипулировать данными. Следовательно, есть способы представления данных, основанные на разных философиях программирования. В функциональном программировании данные обычно представляются в алгебраическом типе данных. Сегодня я хотел бы кратко рассказать о двух способах представления ADT в Scala. Первый - sealed trait и case class . Другой не часто обсуждается при описании данных, но это..

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

Если наследование класса case запрещено, как это представить?
Я пытаюсь создать классы case, как описано в эта статья sealed abstract case class Exp() case class Literal(x:Int) extends Exp case class Add(a:Exp, b:Exp) extends Exp case class Sub(a:Exp,b:Exp) extends Exp Однако в IntelliJ появляется...
12611 просмотров
schedule 13.09.2021

Кодирование трехстороннего инклюзивного типа в Scala
У меня есть данные, состоящие из трех полей, скажем, String , Int и Double . Все они необязательны, но все это должно содержать хотя бы одно из этих полей. Я пробовал cats.data.Ior , вроде type MyType = String Ior Int Ior Double . Он...
186 просмотров
schedule 06.11.2021

Есть ли в Scala способ иметь специальные ADT?
Я хочу полностью избавиться от исключений в моем коде Scala, вместо этого возвращать явные / типизированные результаты (ADT) из таких методов: class SomeService { def method1: Method1Result = ... } object SomeService { trait Method1Result...
81 просмотров
schedule 12.10.2021

Получить значение варианта, который сам может быть другим вариантом
У меня есть вариант ScalarVar using ScalarVar = std::variant<int, std::string>; И вариант Var , который сам может быть ScalarVar или std::vector из ScalarVar s using Var = std::variant<ScalarVar,...
255 просмотров

Уменьшение отступа совпадений для глубоко вложенных свойств
Мне нужно сослаться на значение в глубине структуры, которая включает Option , вложенный в свойство struct , вложенный в Result . Мое текущее (рабочее) решение: let raw = &packet[16..]; match PacketHeaders::from_ip_slice(raw) {...
463 просмотров

эмулировать расширяемые алгебраические типы на scala
Традиционный подход к алгебраическим типам рекомендует что-то вроде этого: sealed trait CompositeType final case class LeftBranch(left : String) extends CompositeType final case class RightBranch(right : Int) extends CompoisteType object Trivial...
205 просмотров
schedule 21.03.2022

Как система типов Scala узнает, что cons + Nil является исчерпывающим?
Я просто написал эту функцию, гадая, что произойдет, если я пропущу регистр Nil, и заметил, что scalac выдает предупреждение: def printList[String](list: List[String]) { list match { case head :: tail => { println(head)...
159 просмотров

Сопоставление с образцом записи Haskell
Я ищу способ упростить шаблоны функций, когда фактические данные не требуются: data X = A | B String | C Int Int String myfn :: X -> Int myfn A = 50 myfn (B _) = 200 myfn (C _ _ _) = 500 Есть ли способ сделать более простой шаблон для...
14608 просмотров

Получение ошибки несоответствия типа с помощью функции Haskell zipWith
Я новичок в Haskell. У меня есть тип данных Neuron , которому принадлежит список Double значений: data Neuron = Neuron [Double] deriving (Eq, Read, Show) Я пытаюсь суммировать каждый элемент в списке, принадлежащем Neuron, и в другом...
74 просмотров

Куда девался Дефадт в новом вкладе clojure?
Итак, копаясь в попытках выяснить, как делать ADT в Clojure, я натыкаюсь на старый clojure-contrib, который хорош, за исключением того, что он был заменен. Хорошо, ничего страшного, просто просмотрите замененный каталог разбитых библиотек...
961 просмотров

Конструктор типа как возвращаемый тип
В Scala я могу определить алгебраический тип данных : scala> sealed trait Maybe[A] defined trait Maybe scala> case class Just[A](x: A) extends Maybe[A] defined class Just scala> case object NothingHere extends Maybe[Nothing] defined...
467 просмотров

Определение типа алгебраической структуры данных
Предположим, data MyAlgebraicType :: Foo Int | Bar Int . Если у меня есть переменная типа MyAlgebraicType , как определить, является ли она типом Foo Int или Bar Int ?
51 просмотров

Как определить Eq-экземпляр списка без GADT или контекстов типа данных
Я использую Glasgow Haskell Compiler, Version 7.8.3, stage 2 booted by GHC version 7.6.3 . Я попытался использовать следующее определение данных для типа List в Haskell: data Eq a => List a = Nil | Cons a (List a) Однако флаг...
1175 просмотров

Невозможно сопоставить параметризованный тип с конкретным типом после сопоставления с образцом
При использовании scala 2.12.8 это не скомпилируется без приведения: trait Content case object A extends Content case class B(i: Int) extends Content def asList[C <: Content](content: C): List[C] = content match { case A => List(A) //...
78 просмотров

Как написать функцию from и to для Add Void a === a?
Из документа: http://chris-taylor.github.io/blog/2013/02/10/the-алгебра-оф-алгебраических-данных-типов/ , там написано: Bool и Add () () эквивалентны, потому что мы можем определить функцию «от» и «до»: to :: Bool -> Add () () to False...
122 просмотров
schedule 24.07.2022

Haskell: понимание пользовательских типов данных
Я пытаюсь создать свой собственный тип данных в Haskell. У меня есть следующие типы данных: type Length = Integer type Rotation = Integer data Colour = Colour { red, green, blue, alpha :: Int } deriving (Show, Eq) Я пытаюсь...
1718 просмотров

Превратите тип данных в карту
Я хочу превратить свой тип данных Exp в карту, где имена функций (Add, Subtract и т. д.) являются ключами, а значения — количеством раз, которое они встречаются в выражении. Вот моя декларация данных: data Exp = Number Int | Add...
262 просмотров

Алгоритм обнаружения и удаления минимального количества противоречивых фактов (наверное, в PROLOG)?
Как вы запрограммируете следующий алгоритм? Представьте себе такой список «фактов», где буквы представляют переменные, привязанные к числовым значениям: x = 1 y = 2 z = 3 a = 1 b = 2 c = 3 a = x b = z c = z Очевидно, что не все эти «факты»...
193 просмотров

Привязка F#/SIlverlight к алгебраическим типам данных
Учитывая структуру данных: type Candidate = SalesRep of SalesRep | Analyst of Analyst type ScorableCandidate = { candidate: Candidate ; mutable comments: string ; mutable score: int ; } и сетка данных, которая хочет иметь...
157 просмотров
schedule 16.09.2022

Haskell: как сгенерировать декартово произведение двух простых алгебраических типов данных
Я изучаю Haskell, поэтому пишу несколько простых карточных игр. Я определил некоторые типы данных: data Rank = Ace|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Jack|Queen|King deriving (Eq,Show,Ord) data Suit = Hearts|Spades|Diamonds|Clubs...
629 просмотров