问题标签 [transducer]

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 回答
322 浏览

clojure - 实现 Clojure 条件/分支转换器

我正在尝试在 Clojure 中制作一个条件转换器,如下所示:

它非常有用,因为它可以让你做这样的事情:

但是,此条件转换器不适用于在其 1-arity 分支中执行清理的转换器:

是否可以调整定义if-xf以处理带有清理的传感器的情况?

我正在尝试这个,但有奇怪的行为:

具体来说,冲洗发生在最后:

有没有办法在不将整个输入序列存储在该转换器内的本地状态中的情况下制作这个分支/条件转换器(即在清理时在 1-arity 分支中进行所有处理)?

0 投票
1 回答
728 浏览

gate - 在 GATE 开发人员中使用 JAPE 删除不需要的注释标签

我想要一个JAPEwhich on execute 将返回Annotation列表,这听起来对我的要求有意义。就像我不希望在我的注释中隐含SpaceToken, Sentence,Token等。Lookup因为这Jape将是应用程序序列的最后一个,并且它不需要在 LHS 中匹配任何东西(据我所知,CMIIW),有什么方法可以让我们只有 RHS 代码)

0 投票
1 回答
89 浏览

clojure - 换能器:为什么这个换能器不打印任何东西

我有以下代码,我希望它能够1,2,3,4在控制台上打印,然后返回[true,true,true,true]. 但它只是返回空并且不在控制台上打印任何内容。

逻辑是:它循环for (0..3)inc每个元素加1,所以我得到了(1..4),然后运行(map (fn[x] (println x) true))它从惰性序列中取1,打印1,返回true,并将take-while结果输出到[true],然后取2的下一个元素,打印2、返回[true,true]等,所以结果应该打印1,2,3,4到控制台,然后返回[true,true,true,true]。但实际上,它什么也不打印并返回[]。这个怎么理解?

0 投票
1 回答
866 浏览

clojure - Clojure 减少换能器

我正在寻找一个具有缩减功能的传感器的简单示例。我希望以下内容会返回一个转换函数,因为(filter odd?)这样工作:

我目前对换能器的理解是,通过省略集合参数,我们得到一个可以与其他换能函数组合的换能函数。为什么filter和不同reduce

0 投票
2 回答
1080 浏览

java - Clojure 转换器与 Java 中流的中间操作的概念是否相同?

当我学习 Clojure 中的转换器时,我突然想到了它们让我想起的东西:Java 8 流!

转换器是可组合的算法转换。它们独立于其输入和输出源的上下文,并且仅根据单个元素指定转换的本质。

不是存储元素的数据结构;相反,它通过计算操作的管道从数据结构、数组、生成器函数或 I/O 通道等源传送元素。

Clojure:

爪哇:

除了静态/动态类型的差异之外,这些在目的和用法上似乎与我非常相似。

类比 Java 流的转换是一种合理的思考转换器的方式吗?如果不是,它有什么缺陷,或者两者在概念上有何不同(更不用说实现了)?

0 投票
1 回答
303 浏览

javascript - 执行数组迭代时如何避免中间结果?

使用数组时,经常需要中间表示 - 特别是在函数式编程中,其中数据通常被视为不可变:

如何在 Javascript/Ecmascript 2015 中避免这种行为以获得更有效的迭代算法?

0 投票
0 回答
336 浏览

dictionary - 为什么函数 reduce 不接受函数映射等多个集合?

Rich 在clojure 中引入transducer 时,这个概念是基于map 可以通过reduce 实现的假设。但是如果reduce不接受多个集合,我们如何通过reduce实现(map + [1 2] [1 2])?

为了实现这一点,需要增强当前的reduce api吗?

0 投票
2 回答
204 浏览

asynchronous - 如何防止关闭!-ing 在放入 on-chan 之前

我想运行类似的代码

异步划分输入和输出(副作用)。

然后我编写了代码来进行下面的实验。

这段代码的解释:

  • 实际上 input 中的元素及其数量在运行之前并没有定义,并且 input 中的元素可以取 0 到 10 之间的一些数字。
  • async/onto-chan用于将元素的 Seq(输入片段)放入通道中c,并将被多次调用,因此第三个参数是false.
  • prn是 的替代品a-side-effect

我期望上面的代码打印

但是在 REPL 中它不打印任何字符。

然后我添加一个等待的时间,就像这样

这段代码在上面给出了我的预期输出。

然后我检查core.async/onto-chan

我认为发生了什么:

  1. 该频道ccore.async/close!在我的代码中编辑。
  2. 因为通道被关闭了,所以参数的每一项都core.async/onto-chancore.async/>!徒劳地放在了go-loopin中。onto-chanc

close!是否有确定的方法可以在ing之前放置项目?onto-chan写一个不使用的同步版本go-loop

还是我的想法错了?

0 投票
1 回答
60 浏览

clojure - 直接应用换能器并使用“换能器”会产生不同的结果

据我了解,transducer 是一种在reduce发生之前转换 reducer 函数的函数。换句话说,(transduce transducer reducer collection)等价于(reduce (transducer reducer) collection)。所以这两个表达式

必须返回相同的值。对?

错误的

错误还是功能?我的 Clojure 版本是1.8.0.

0 投票
1 回答
1112 浏览

raspberry-pi - 使用 Raspberry Pi 通过压电换能器产生“哔”声

我想使用我的 Raspberry Pi 通过压电换能器产生一个简短的、高音调(最好是响亮的)“哔”声。

我尝试将传感器的 + 连接到 GPIO 引脚(并将 -ve 连接到 GND),并使引脚短暂变高。这行得通,但它更像是一个非常安静的点击而不是响亮的哔哔声。

有谁知道如何产生蜂鸣声?

谢谢!