Публикации по теме '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 просмотров
schedule
15.10.2021
Уменьшение отступа совпадений для глубоко вложенных свойств
Мне нужно сослаться на значение в глубине структуры, которая включает Option , вложенный в свойство struct , вложенный в Result .
Мое текущее (рабочее) решение:
let raw = &packet[16..];
match PacketHeaders::from_ip_slice(raw) {...
463 просмотров
schedule
13.03.2022
эмулировать расширяемые алгебраические типы на 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 просмотров
schedule
27.03.2022
Сопоставление с образцом записи Haskell
Я ищу способ упростить шаблоны функций, когда фактические данные не требуются:
data X = A | B String | C Int Int String
myfn :: X -> Int
myfn A = 50
myfn (B _) = 200
myfn (C _ _ _) = 500
Есть ли способ сделать более простой шаблон для...
14608 просмотров
schedule
25.03.2022
Получение ошибки несоответствия типа с помощью функции Haskell zipWith
Я новичок в Haskell. У меня есть тип данных Neuron , которому принадлежит список Double значений:
data Neuron = Neuron [Double]
deriving (Eq, Read, Show)
Я пытаюсь суммировать каждый элемент в списке, принадлежащем Neuron, и в другом...
74 просмотров
schedule
27.03.2022
Куда девался Дефадт в новом вкладе clojure?
Итак, копаясь в попытках выяснить, как делать ADT в Clojure, я натыкаюсь на старый clojure-contrib, который хорош, за исключением того, что он был заменен. Хорошо, ничего страшного, просто просмотрите замененный каталог разбитых библиотек...
961 просмотров
schedule
10.05.2022
Конструктор типа как возвращаемый тип
В 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 просмотров
schedule
13.06.2022
Определение типа алгебраической структуры данных
Предположим, data MyAlgebraicType :: Foo Int | Bar Int . Если у меня есть переменная типа MyAlgebraicType , как определить, является ли она типом Foo Int или Bar Int ?
51 просмотров
schedule
02.07.2022
Как определить 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 просмотров
schedule
14.07.2022
Невозможно сопоставить параметризованный тип с конкретным типом после сопоставления с образцом
При использовании 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 просмотров
schedule
20.07.2022
Как написать функцию 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 просмотров
schedule
28.07.2022
Превратите тип данных в карту
Я хочу превратить свой тип данных Exp в карту, где имена функций (Add, Subtract и т. д.) являются ключами, а значения — количеством раз, которое они встречаются в выражении. Вот моя декларация данных:
data Exp = Number Int
| Add...
262 просмотров
schedule
20.08.2022
Алгоритм обнаружения и удаления минимального количества противоречивых фактов (наверное, в PROLOG)?
Как вы запрограммируете следующий алгоритм?
Представьте себе такой список «фактов», где буквы представляют переменные, привязанные к числовым значениям:
x = 1
y = 2
z = 3
a = 1
b = 2
c = 3
a = x
b = z
c = z
Очевидно, что не все эти «факты»...
193 просмотров
schedule
02.09.2022
Привязка 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 просмотров
schedule
05.10.2022