Описание тега semigroup

Полугруппа - это алгебраическая структура, состоящая из множества вместе с ассоциативной бинарной операцией
2 ответа

Функция "mayBeMempty" для полугруппы

Следующая функция - mayBeMempty :: (Eq a, Semigroup a) => a -> a -> Bool mayBeMempty candidate ref = candidate <> ref == ref Является (менее эффективным) обобщением Data.Set.isSubSetOf, Он проверяет, содержится ли первый аргумент во в…
25 дек '18 в 18:46
1 ответ

Скрытие объявлений экземпляров класса типов при импорте в Haskell

Я пытаюсь сделать игру в крестики-нолики, и я решил создать типы для ячеек (элементов доски) и доски следующим образом: data Cell = X | O deriving (Show, Eq) type Board = [[Maybe Cell]] Здесь Nothing представляет пустую ячейку, (Just X) и (Just O) п…
22 фев '19 в 21:22
1 ответ

Как написать экземпляр `Semigroup` и их`quickCheck` для параметризованных типов?

В упражнениях по программированию на Haskell из Первой книги принципов по полугруппе меня просят написать quickCheck для пользовательских классов типов. Классов типов много, но я не понимаю, как писать даже базовые: Проблемы: Первый для Trivial: mod…
22 окт '18 в 11:08
2 ответа

Полугруппа с функцией в Scala

Я пытаюсь конвертировать Haskell Semigroup Скала. Код на Haskell работает нормально, но я не могу написать его в Scala Haskell: import Data.Semigroup newtype Combine a b = Combine { unCombine :: (a -> b) } instance Semigroup b => Semigroup (Co…
0 ответов

Совместимый код для полугруппового моноидного предложения

Semigroup становится суперклассом Monoid, Я прочитал рекомендации на этой странице для написания совместимого кода, но я также не люблю условно зависеть от semigroups пакет ни ставить мой mappend код в объявлении верхнего уровня. Моя попытка сейчас …
17 мар '18 в 21:36
1 ответ

Как получить все алгебраические ассоциативные операции на конечном множестве эффективным алгоритмом?

Количество бинарных операций на множестве из 2 элементов равно 2^(2*2)=16, Количество ассоциативных бинарных операций на этом наборе составляет всего 8.Количество бинарных операций на наборе из 3 элементов составляет 3^(3*3)=19683.Количество ассоциа…
09 июл '14 в 16:25
2 ответа

Можете ли вы сформулировать моноид или полугруппу для радикальной сортировки?

Это псевдокод для радикальной сортировки: Pseudocode for Radix Sort: Radix-Sort(A, d) // Each key in A[1..n] is a d-digit integer. (Digits are // numbered 1 to d from right to left.) 1. for i = 1 to d do Use a stable sorting algorithm to sort A on d…
21 фев '14 в 11:52
1 ответ

mempty с различным определением в зависимости от того, является ли mempty левым или правым аргументом?

У меня есть следующий тип данных и экземпляр полугруппы: data Or a b = Fst a | Snd b deriving (Eq, Show) instance Semigroup (Or a b) where (<>) (Fst a) (Fst b) = Fst b (<>) (Snd a) (Fst b) = Snd a (<>) (Fst a) (Snd b) = Snd b (<…
08 мар '16 в 20:21
1 ответ

Определение экземпляра полугруппы, который зависит от самого себя

... или неудачи программиста на Haskell, который должен кодировать Scala, часть 5. У меня есть следующая структура в Scala: case class ResourceTree( resources: Map[String, ResourceTree] ) И, используя кошек, я хотел бы определить Semigroup экземпляр…
2 ответа

Почему для Either нет альтернативного экземпляра, кроме полугруппы, которая ведет себя аналогично альтернативе?

Я новичок в Haskell, и мне интересно, почему нет альтернативного варианта Either но полугруппа, которая ведет себя так, как я ожидал бы от альтернативы: instance Semigroup (Either a b) where Left _ <> b = b a <> _ = a Этот экземпляр отбр…
10 июн '17 в 10:01
2 ответа

Сохраняя IO ленивым при добавлении

Возможно, у меня сложилось ложное впечатление, что Haskell ленивее, чем он есть, но мне интересно, есть ли способ получить лучшее из обоих миров... Data.Monoid а также Data.Semigroup определить две вариации First, Моноидальная версия моделирует край…
05 ноя '17 в 10:13
0 ответов

Плавающие точки, обернутые в Sum и Product, даже если это нарушает ассоциативность?

Пытаясь выучить Haskell и наткнулся на это: Prelude> import Data.Semigroup Prelude Data.Semigroup> let x = Sum 0.1 <> Sum 0.2 <> Sum 0.3 Prelude Data.Semigroup> let y = (Sum 0.1 <> Sum 0.2) <> Sum 0.3 Prelude Data.Se…
21 авг '17 в 21:00
1 ответ

Можете ли вы сформулировать пузырьковую сортировку как моноид или полугруппу?

Учитывая следующий псевдокод для пузырьковой сортировки procedure bubbleSort( A : list of sortable items ) repeat swapped = false for i = 1 to length(A) - 1 inclusive do: /* if this pair is out of order */ if A[i-1] > A[i] then /* swap them and r…
19 фев '14 в 10:22
1 ответ

Почему в скале нет экземпляра полугруппы для TrieMap

Хотя я могу сделать Map("a" -> 1) |+| Map("a" -> 2) Кажется, нет поддержки TrieMap("a" -> 1) |+| TrieMap("a" -> 2) Зачем?
19 июн '15 в 09:34
1 ответ

Вычисление всех инфиксных продуктов для моноида / полугруппы

Введение: продукты Infix для группы Предположим, у меня есть группа G = (G, *) и список элементов A = {0, 1, ..., n} ⊂ ℕ x : A -> G Если наша цель заключается в реализации функции f : A × A -> G такой, что f(i, j) = x(i) * x(i+1) * ... * x(j) …
1 ответ

Почему полугруппа скалаза не ковариантна?

Это простой смысл, почему Scalaz SemiGroup не является ковариантным: https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/syntax/S…
21 сен '14 в 08:58
1 ответ

Связь между классами полугрупп и полугрупп

На прошлой неделе я пытался понять некоторые из "основных" типов и классов типов в Haskell (но изучал Haskell не более двух недель), и я нашел кое-что, что меня беспокоит: "Полугруппоид" - это обобщение "Категории", означающее, что любая Категория т…
26 фев '17 в 11:54
0 ответов

Почему скалаз |+| оператор не работает только с картами, значение которых Seq?

У меня есть две карты следующим образом. import scalaz._, Scalaz._ val map1: Map[String, Seq[String]] = Some value val map2: Map[String, Seq[String]] = Somve Value Это прекрасно компилируется и все работает как положено. // Compiles map1.mapValues{_…
09 янв '17 в 19:49
2 ответа

Почему экземпляр Полугруппы Maybe смещен в сторону Just, а Monoid использует Nothing в качестве пустого элемента?

Maybe выражает вычисления, которые могут не дать результата из-за ошибки. Поэтому такие вычисления должны быть короткими. Сейчас MaybeПохоже, что экземпляры полугруппы / моноида нарушают эту семантику, потому что первая склонна к Just и последний от…
04 май '18 в 08:36
1 ответ

Почему в Скалазе нет>=> полугруппы для A => M[A]?

Это продолжение моего предыдущего вопроса Kleisli определяет два оператора <=< (сочинить) и >=> (а потом). >=> выглядит очень естественно для меня, и я не понимаю, как <=< может быть полезным Более того, похоже, что нет >=…
14 июл '15 в 13:31