首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript的例子中,函数么半群的二元算子是什么

在JavaScript的例子中,函数么半群的二元算子是什么
EN

Stack Overflow用户
提问于 2019-03-22 05:15:45
回答 2查看 229关注 0票数 0

this article函数中,通过C#代码和Haskell类型定义引入了么半群。

如果b是么半群,则函数a -> b是么半群。这意味着您可以组合两个相同类型的函数。在面向对象的上下文中,这意味着只要返回类型形成monoid,就可以将具有相同签名的两个方法组合成一个方法。

泛化

虽然上面的C#代码只是一个示例,但一般规则是,任何返回么半群的函数本身都是么半群。在Haskell中,此规则在标准库中明确表示:

实例么半群b =>么半群(a -> b)

这意味着对于任何么半群,函数a -> b也(自动)是么半群。

问题是C#中的示例对"GUID“过于具体,我不知道作者试图在代码中做什么,而Haskell类型定义仅仅是类型定义。

用JavaScript实现这个函数Monoid的示例代码是什么?

cf) Why is instance Monoid b => Monoid (a -> b) in base?

EN

回答 2

Stack Overflow用户

发布于 2019-03-22 05:50:18

重要的是要知道,能够组合事物并不一定意味着它们是么半群。要成为么半群,它必须具有结合性、左单位和右单位。

C#:

代码语言:javascript
复制
public static Func<Guid, int> Combine(
    Func<Guid, int> f,
    Func<Guid, int> g)
{
    return x => f(x) + g(x);
}

JS:

代码语言:javascript
复制
function combine(f,g) {
    return x => f(x) + g(x)
}

function addOne(x) {
  return x + 1;
}

function addTwo(x) {
  return x + 2;
}

let newFunction = combine(addOne, addTwo);
let result = newFunction(0);
console.log(result)

票数 1
EN

Stack Overflow用户

发布于 2019-03-22 07:00:58

Monoid Laws

同一性法则:

combine (identity, a) == combine (a, identity)

结合性定律:

combine (a, combine (b, c)) == combine (combine (a, b), c)

我们可以为函数实现身份元素(identity)和二元运算(combine) -

代码语言:javascript
复制
// identity element
const identity =
  x => x

// binary operation
const combine = (a, b) =>
  x => a (b (x))
 
// sample functions
const a =
  x => x + 3
  
const b =
  x => x - 1

const c =
  x => x * x

// uphold laws
console.log
  ( combine (identity, a) (2) === combine (a, identity) (2)
  , combine (a, combine (b, c)) (2) === combine (combine (a, b), c) (2)
  )
  
// => true
// => true

根据您的域,二元运算和标识元素会有所不同。有关如何为各种集合实现标识元素和二进制操作的更多信息,请参阅Wikipedia上的表格。

当然,您并不局限于这些域。您的自定义类型可能具有满足么半群定律的各种二元运算和标识元素。如果法律得到支持,你的类型就属于么半群类别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55289369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档