问题标签 [partial-functions]

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 投票
2 回答
8244 浏览

haskell - 在 Haskell 中,为什么非穷举模式不是编译时错误?

这是我调用 Haskell 子字符串函数时为什么会出现“函数中的非详尽模式...”的后续内容?

我知道使用-Wall, GHC 可以警告非详尽的模式。我想知道默认情况下不使其成为编译时错误的原因是什么,因为始终可以显式定义部分函数:

这个问题不是特定于 GHC 的。

是不是因为...

  • 没有人想强制 Haskell 编译器执行这种分析?
  • 非详尽的模式搜索可以找到一些但不是所有的情况?
  • 部分定义的函数被认为是合法的,并且经常使用到不会强加上面显示的那种构造?如果是这种情况,您能否向我解释为什么非详尽的模式是有帮助/合法的?
0 投票
5 回答
1995 浏览

scala - Scala总函数作为部分函数

由于总函数是偏函数的特例,我想我应该能够在需要偏函数时返回一个函数。

例如,

当然,这种语法无法编译。我的问题是,是否可以这样做,如果可以,我需要做什么才能使语法正确。

我知道我可以做以下事情,但这只是一个出于好奇的问题

0 投票
5 回答
493 浏览

list - 使用部分函数短路列表映射

因此,我制作了这个名为 tryMap 的函数,如下所示:

如其文档中所述,其目的是使用部分函数映射列表,如果“完整”映射不是“可能”,则使用简短的 curcuit,因为缺少更好的词。

这是如何使用它的示例:

鉴于此功能...

...我们现在可以使用 tryMap 对整数列表进行全有或全无映射,如下所示:

之后,例如,计算这些值的总和将很容易——如果它们可以计算出来的话。

现在,我的问题是:

有没有更简单/更干净的方法来实现这个tryMap函数?(当然,除了不那么冗长之外。:-P)我觉得可以使用列表表达式、maybe-expressions(来自 FSharpx)或两者的组合来做一些聪明的事情,但我不太明白目前如何。:-/

PS:如果您对此功能有一个比“tryMap”更好的名称,请不要犹豫发表评论。:-)

更新1:

我想出了这个版本,它非常接近我的想法,但遗憾的是它没有短路。:-/

注意:这使用了 FSharpx 的可能表达式。

更新 2:

感谢Tomas Petricek,我想到了一个替代方案:

此函数在映射到其第一个None值后停止映射。发生这种情况时,quitwill be true,其余元素将不会被映射。之后,如果quittrue,则丢弃部分映射的列表并None返回。如果它从不映射到None,它将最终构建一个用于构建映射列表的延续。

虽然它仍然很大,现在它只做了一个“轻微”的短路,因为它停止尝试映射列表,但它仍然遍历它,因为这就是折叠的工作方式。:-/

0 投票
1 回答
590 浏览

scala - 在 Scala 中使用部分函数时,我可以应用参数默认值吗

我已经定义了两个部分函数(哈希),我希望它们带有一个可选的第二个布尔参数:

当我使用两个参数调用函数时,它会编译,但只有一个参数会出现编译错误:

我只是将其重构为使用部分函数,​​在重构之前我可以强制哈希函数使用默认值而没有任何问题。

为什么部分函数实现无法允许默认参数的任何想法?我使用部分函数和柯里化在一起做错了吗?

0 投票
1 回答
1603 浏览

scala - Scala Cons 模式匹配如何确定 List 的头部和尾部?

下面的语句中头尾是如何确定的:

不应该有一些代码将第一个元素提取为头部并将尾部作为新列表返回。我一直在梳理 Scala 标准库代码,但我无法找到/理解这是如何/在哪里完成的。

0 投票
5 回答
654 浏览

scala - 如何知道何时使用 PartialFunction vs return Option

例如,我们定义了一个函数,应该将 1、3、42 分别转换为 "foo"、"bar"、"qix" 和所有其他整数到 "X"。

我提出了 2 个实现:该方法f需要分开,因为它可以在其他上下文中重用。

和 :

我倾向于选择第二种,因为它避免了许多重复的 Some(...)

WDYT ?

0 投票
1 回答
2329 浏览

scala - flatten 函数中使用的模式匹配中 List[_] 的解释

我是 scala 新手,我无法理解以下功能

特别是我不明白flatMap和模式匹配的组合以及第一种情况的含义ms:List[_]

有人可以解释一下,也许可以提供一个更简单的例子来澄清这个概念吗?

0 投票
2 回答
445 浏览

haskell - 为什么要取总函数

take (-1) [][]

比偏函数(即错误)更喜欢它的原因是什么?

是否存在利用此属性的用例?

0 投票
1 回答
203 浏览

scala - 在定义的地方应用部分函数,​​在未定义的地方应用不同的函数

这是一个励志的例子,鉴于:

我想返回:

我已经尝试以多种方式做到这一点。第一的:

然后我尝试使用一个元组:

然后稍微不同地定义偏函数:

有没有办法仅将 PartialFunction 应用于为其定义的元素?或以某种方式将 PF 与 Identity 复合。

0 投票
0 回答
328 浏览

scala - 早期初始化程序中的匿名部分函数需要“过早访问类”

为什么编译失败:

带有错误消息<$anon: Item => String> requires premature access to class Marquee?在我看来,部分功能没有使用Marquee. 然而这编译:

第一个版本,其中包含匿名部分函数,​​在不是早期定义(即,如果我删除)Marquee时会编译。我认为这是一个重要的线索,但我无法看到如何干扰任何事情。明确地确定范围,因此不能重新定义它的后代也不起作用。val stringswith DummyTraitDummyTraitStringItemMyModule.StringItemDummyTrait