问题标签 [clojure-core.match]
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.
clojure - Clojure核心与变体匹配错误
我正在尝试使用带有 core/match 和 core/typed 的 clojure来解决这个SICP 练习。
我有点关注 Jeanine Adkisson 的“变体不是工会”的演讲。
这是我到目前为止得到的:
Structure 类型是一个变体:它要么是一个权重,它只是一个数字(它的形式为 [:weight weight],其中 weight 是一个数字),要么它是一个移动设备(它具有 [:mobile mobile] 的形式,其中移动是移动类型的东西)。
它类型检查和总权重功能适用于一个简单的输入:一个由两个权重组成的移动设备。
但是正如您所看到的,对于具有移动设备分支的移动设备来说,它会失败。
由于某种原因,它与 [:mobile mobile] 案例不匹配。知道我在做什么错吗?
clojure - 这是一个 clojure.core.match 错误还是只是我?
在第一个片段中,我希望它返回:a1
。
奇怪的。
这有效:
这是预期的行为吗?
clojure - 如何将匹配的:或绑定到 core.match 中的变量
如何将匹配的:or
或绑定到 core.match 中的变量?
clojure - Core.match 与地图键/值上的守卫匹配
是否可以使用 core.match 执行以下操作(愚蠢的示例):
??
我希望能够在地图上进行模式匹配,但是有:guard #(< % 10000)
一点吗?即根据地图中键的值在模式中有一个功能吗?
这可能吗,我知道我可以在向量上执行此操作,但无法计算出语法或者是否可以使用地图。
我知道我可以使用解构,但我想知道是否可以使用模式匹配。
谢谢
clojure - 如何在匹配子句中重用匹配模式?
我需要匹配两种元组并从中生成地图。
两者都有一个关键字和一个字符串。可以有第三项(语言代码)。
我只需要匹配那些关键字是:foo
or:bar
并决定我将使用clojure.core.match
:
那行得通,但我想:guard l10n-key
在不同的子句中重用匹配模式。所以我想我可以使用一些语法引用和取消引用拼接:
然而,defn
表达式崩溃:
我究竟做错了什么?
clojure - 为什么匹配地图时匹配子句的顺序很重要?
给定x
and y
,两者都旨在匹配具有相同匹配子句的映射。唯一的区别在于子句的顺序:
我想匹配{:a 1 :b 2}
:
该函数y
已经为给定的地图产生了预期的结果。
诚然,我可能不明白算法是如何工作的,但我的印象是,它clojure.core.match
会以某种方式解决,{:a _ :b _}
比它更具体{:a _}
,因此会先尝试。
这就是为什么我惊讶地发现匹配子句的顺序似乎很重要。
为什么会这样或者我做错了什么?