问题标签 [active-pattern]
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.
f# - 有区别的联合中的柯里化参数
我有一个像这样的歧视性工会:
我必须像这样进行模式匹配(似乎需要括号):
有没有办法像这样与活动模式匹配:
如果不是,F# 怎么会设计成这样与 curried 参数的匹配不起作用,而是强制您使用元组?
编辑:这受到 F# 列表的启发,您可以在其中使用h::t
没有任何元组或类似的东西。源代码是这样的:
f# - 在 F# 中使用布尔函数作为模式鉴别器
我试着用谷歌搜索这个,但我找不到能引导我去做我想做的事情的词集。
我正在尝试解决Project Euler Problem 54,我有这个相当荒谬的功能:
所有isSomething
关键字都是接受 astring array
并返回布尔值的函数。有没有更优雅的方式使用模式匹配来做到这一点?
这不起作用:
我正在寻找这样的东西:
我记得有一次看到类似的东西,但我不记得在哪里或如何找到它。
f# - 联盟成员的子集作为模式匹配中的“参数”
让我们为具有多种类型的二元节点以及其他类型的节点的树定义类型,即
我想使用递归函数来操作这棵树,例如,可以交换任何类型的二进制节点的子节点(通过构造一个新节点)。让我发疯的问题:如何匹配所有 BinaryNode 以使 Node 风格成为“参数”,以便具有可应用于任何 BinaryNode 风格的通用交换以返回该风格的交换节点?
我知道如何使用活动模式匹配所有作为 BinaryNodes 的树:
但这还不够好,因为以下似乎无法实现:
换句话说,我还没有找到使用 BinaryNode 风格的方法,就好像它是像 a 和 b 这样的参数。相反,似乎我必须分别匹配每个 BinaryNode 风格。如果存在大量二进制节点风味,这可能具有实际意义。类型树是 Fsyacc/Fslex 生成的解析器/词法分析器的 AST,它限制了重组它的选项。有任何想法吗?
f# - 为什么主动模式会这样表现?
F# Design Patterns
我在Gene Belitski的优秀书中找到了这段代码:
作者承认这是
“如果您还记得值的 let 绑定是基于模式匹配的数据反汇编的极端情况,那么这个稍微令人难以置信的示例就会变得清晰,因此I'm active pattern
应用于输入参数 40 并将结果 42 绑定到 x。”
我不明白。I'm active pattern
鉴于 40 在右侧,为什么会应用于 40?直觉上,我猜 y = 38,而不是 42,将表达式let (`` I'm active pattern `` y) = 40
视为隐式函数。
谁能解释一下?
f# - F#:类型匹配和活动模式
鉴于以下情况:
...为什么会这样:
...但不是这个?
f# - 在 F# 模式匹配中拆分代码块以提高可读性
在使用“匹配”的模式匹配中,每个模式的代码可能很大,参见上面的Foo,这让我想将块拆分为单独的调用以提高可读性。
这样做的问题可能是即使模式不匹配,也会评估调用,如上面的Bar所示。
- 选项 1:惰性评估。
- 选项 2:转发参数/参数。
- 选项 3:转发参数/参数并使用 Active 模式。
在每种模式下的代码可能很大的情况下,提高可读性的首选方法是什么。或者还有其他明显的解决方案吗?
f# - ActivePattern 与 System.Type 匹配有什么问题?
给Type mismatch. Expecting a Type -> Choice<'a,'b> but given a Type -> 'c -> Choice<unit,unit> The type 'Choice<'a,'b>' does not match the type ''c -> Choice<unit,unit>' (using external F# compiler)
f# - FSharpPlus 上的活动模式 trySscanf
我正在尝试Scan
围绕FSharpPlus'strySscanf
创建一个活动模式,以便以下工作:
我理解不完整的活动模式的工作方式,我只需要返回一个选项,trySscanf
已经返回一个选项,所以我尝试了以下操作:
当那不起作用时,我尝试了更明确的
它们都因以下编译错误而失败:
显然,trySscanf 有一堆我没有考虑到的重载,我不知道该怎么做。
我想要做的甚至可能吗?
有趣的是,如果我添加match
表达式,编译错误就会消失,但是我可能只使用PrintfFormat
我尝试的第一个匹配案例:
最后一行表示错误:
f# - 如何部分应用活动模式
Fsharpx.Extras
NuGet 包公开了一个用于正则表达式匹配的活动模式,限定为Fsharpx.Text.Regex.Match
.
第一个参数是来自 BCL 的 RegexOptions 值。
而不是必须写:
我希望有可能(使用修改后的Match'
活动模式):
Match'
我想出的一个可能的定义是:
...效果很好。但是,我不禁想知道是否还有另一种类似于部分应用函数的方法,例如:
令人沮丧的是,这抱怨Type has no accessible object constructors.
.
是否可能类似于后一种(alebit 失败)方法?