问题标签 [monomorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3337 浏览

subgraph - 子图同构和子图单态有什么区别?

在我从事的一个项目中,出现了同构与单态的主题。

一点背景知识:我不是图论专家,也没有接受过正规培训。但是这个主题在化学中非常重要,化学家期望在他们使用的结构搜索系统中发生一种特定类型的子图匹配。

如果目标图 A 有 n 个节点和 m 条边,那么化学家将接受子图匹配,其中查询图 B 有 n 个节点和 m-1 条边。唯一的要求是 B 中的每条边都应该出现在 A 中。例如,6 个节点的线性链应该匹配 6 个节点的循环。

这种匹配同构还是单态?也许完全是别的东西?

0 投票
2 回答
518 浏览

f# - 为什么 F# 函数返回“val FunctionName: int -> int”的签名?

我在F# Wikibook on High Order Functions 上关注了一些示例。

标题下的第二个代码片段,Composition Function具有以下代码片段。

我有问题的理解是

当我单独使用 F# 交互式 shell (fsi.exe) 运行它时,我得到以下签名。

但是当我运行整个代码片段时,xSquared会返回以下内容。

为什么xSquared需要float取回float

0 投票
1 回答
438 浏览

haskell - 基本 Haskell 单态/多态问题 (HList)

我是 Haskell 和 Stackoverflow 菜鸟,这是我的第一个可能非常基本的 Haskell 问题。

这是有道理的,即使 r1 和 r2 在 r 中是多态的,rPair 也会根据类型签名对齐它们的 r 类型。这种“对齐”是否有技术术语?

如果传递的 R 在 r 中是单态的,则 rCons 效果很好,可以根据需要限制列表的 r 类型。但如果它们在 r 中是多态的,它不会像 rPair 那样对齐它们,并给出错误(在上面定义 rc)。

我对为什么会这样有一个模糊的直觉,但我的问题分为两部分。有人可以清楚地解释这种现象吗?我将如何编写一个 rCons 以使以下内容成立?

谢谢,_c

0 投票
2 回答
2312 浏览

c++ - 什么是 c++ 单态类,这会是一个例子吗?

请告诉我,如果以下类是单态的?

是什么使它具有单态性?单态实际上是什么意思?

编辑:

在类 Boo 的上下文中:

0 投票
1 回答
144 浏览

haskell - 在没有类型注释的 let 绑定中避免单态

我有一些使用类型来消除实例歧义的代码(真正的代码是使用 GHC.TypeLits 单例作为类型标签,但我认为这不是密切相关的),我想使用 let 绑定来避免文本级重复; 不幸的是,这使结果单一化。

以下是该问题的一个示例:

上面的代码不能编译(但是,当然,如果我输入 annotatequux是多态的,一切正常),正确地抱怨它不能IntChar. 有没有什么方法可以让编译成功而无需类型注释并且无需bar undefined在每个使用站点重复?

0 投票
1 回答
83 浏览

ocaml - 过度概括的咖喱 fns

有效,但看似等效

无法编译

并添加显式类型注释

导致编译提前失败

为什么添加显式a b形式会改变这两个模块的类型?

0 投票
3 回答
1129 浏览

c++ - 为什么多态性在haskell(GHC)中如此昂贵?

我参考这个SO question 来问这个问题。唐斯图尔特接受的答案:第一行说“您的代码是高度多态的,将所有浮点变量更改为 Double ..”,它提供了 4 倍的性能提升。

我对在 Haskell 中进行矩阵计算很感兴趣,我应该养成编写高度单态代码的习惯吗?

但是有些语言很好地利用了 ad-hoc 多态性来生成快速代码,为什么 GHC 不会或不能?(阅读 C++ 或 D)

为什么我们不能为 Haskell 提供像 blitz++ 或 eigen 这样的东西?我不明白 GHC 中的类型类和(临时)多态性是如何工作的。

0 投票
1 回答
81 浏览

type-inference - 算法 W 和单态类型强制

我正在尝试为玩具语言编写自己的类型推断算法,但我遇到了障碍——我认为算法 W 只能用于过于通用的类型。

以下是表达式:

类型化规则很简单——我们继续使用类型变量进行抽象和应用。以下是所有可能的类型:

正如您可能已经猜到的那样,ELit : TMono,更具体地说,EConc :: TMono → TMono → TMono

我的问题来自于进行实际的类型推断。当递归表达式结构时,看到 an 时的一般技术EAbs是生成一个新的类型变量来表示新绑定的变量,用(String : TVar fresh)判断替换我们上下文中出现的任何类型,然后继续向下表达式。

现在,当我点击 时EConc,我正在考虑采用相同的方法 - 将子表达式的自由表达式变量TMon替换为上下文,然后对子表达式进行类型推断,并将两个结果的最通用统一符作为主要替代返回。但是,当我使用类似 的表达式尝试此操作时EAbs "x" $ EConc ELit (EVar "x"),我得到了不正确的TFun (TVar "fresh") TMon.

0 投票
2 回答
5205 浏览

javascript - 为什么单态和多态在 JavaScript 中很重要?

我一直在阅读一些关于变化检测的文章,他们都说单态函数比多态函数快得多。例如,这是一个引用:

(..) 这样做的原因是,它必须以动态方式编写,因此它可以检查每个组件,无论其模型结构是什么样的。VM 不喜欢这种动态代码,因为它们无法优化它。它被认为是多态的,因为对象的形状并不总是相同的。Angular 在运行时为每个组件创建变化检测器类,它们是单态的,因为它们确切地知道组件模型的形状是什么。VM 可以完美地优化此代码,使其执行速度非常快。好消息是我们不必太在意这些,因为 Angular 会自动完成。(..)

资源

现在,我试图找到单态与多态的例子,但在任何地方都找不到。任何人都可以解释其中的区别,为什么它更快?

0 投票
2 回答
117 浏览

polymorphism - 模式匹配中的单态类型与默认情况

好吧,实际上这不是问题,因为我解决了它,但它太困扰我了:

让我们这样写:

测试.ml

如果我编译它,我会得到:

ocamlc -o test test.ml 文件“test.ml”,第 6 行,字符 11-62:

警告 8:这种模式匹配并不详尽。这是一个不匹配的值的示例:Badd

9月13日星期二13:24:50编译完成

这很正常,我忘记添加Badd案例了。

因此,由于我讨厌警告,因此我将代码更改为:

然后我编译(并且,正如你所理解的,这是令人不安的部分;-)),我得到:

ocamlc -o test test.ml 文件“test.ml”,第 13 行,字符 31-33:

错误:此表达式具有 char 类型,但表达式应为 int 类型

编译在 9 月 13 日星期二 13:26:48 异常退出,代码 2

嗯,什么?我发现类型op不是'a -> 'a -> bool但是'_a -> '_a -> bool,所以我改变了我的代码,因为我记得 OCaml 不允许非值的多态类型,并且部分应用程序不是值。它变成了:

在我编译之后:

ocamlc -o 测试 test.ml

9月13日星期二13:29:48编译完成

我本可以写:

而且它也可以完美编译(但是,eww,Obj.magic 只是一些低级 OCaml 程序员的昵称,对吗?)。

所以,这是我的问题,当我在语义上写完全相同的东西时,编译器怎么会改变它的行为?(我用多个版本的 OCaml(3.12.1、4.01.0、4.02.3、4.03.0)对其进行了测试)。