问题标签 [transducer-machines]

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 投票
1 回答
2834 浏览

haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?

我想学习这个概念,以便能够理解和使用机器等库。

我尝试关注Rúnar Bjarnason 关于机器的演讲,但信息太少,基本上只是一堆数据类型。k我什至无法理解里面有什么

或者是什么t以及为什么要量化。或者,类似管道的库和机器之间的概念区别是什么?

0 投票
1 回答
301 浏览

haskell - 有人可以提供以下计划的机器实施吗?

我正在玩 Edward Kmett 的机器模块,我在这里和那里有点困惑。我认为提出问题的最佳方式是提供一个玩具用例。如下面所描述的。

一号和二号机器位于 Wye 的两个叉子上。

机器一将整数列表作为参数,并将其推送到下游。机器二将字符列表作为参数,并将其推送到下游。

机器 3 保持内部状态,从 开始mempty,然后mappends在某些条件下它从 Wye 的任一机器接收到的元素(所以不是两者)。然后机器三获取当前状态并将其推送到下游。

机器四将它收到的元素打印到控制台。

到目前为止,我有这个:

但我不确定如何组合 y1 和 y2;或滚动隐藏状态的任意进程,而不是使用 Process.hs 导出的库存组合器之一。

根据建议,机器包的链接:http: //hackage.haskell.org/package/machines

还有一个 pdf 对其功能进行了非常高级的描述:https ://dl.dropboxusercontent.com/u/4588997/Machines.pdf

0 投票
1 回答
144 浏览

haskell - 使用 Data.Machine,您将如何描述一个带有非确定性函数结果的分支计划?

我认为这个问题最好用一个例子来说明。

包装非确定性函数的类型:

一个例子ND

备注:请注意 nd 如何输出一个元组列表,每个元组包含计算结果和一个新的ND(实际上与原始相同,但我们暂时忽略它)。

现在构建一个从源接收输入并为所有输入运行 nd 的进程。

错误Process

备注:上面这个过程是错误的,因为只取了第一个计算结果。理想情况下,该过程应分支为多个并行过程,每个过程产生一个输出 b,并使用其自己的版本递归n'。最终结果应该是可能结果的列表

用例:

0 投票
1 回答
172 浏览

haskell - 使用 Data.Machine,如何将两个 ProcessT 组合在一起来修改两个不同的状态?

假设我有一个修改底层状态的过程Int

另一个修改底层状态是[Int]

我想这样组合它们:

并像这样运行它们:

但我得到这个错误:

建议 p1 和 p2 应该具有相同类型的基础状态。事实上,一个小实验表明 p1 和 p2 实际上正在修改相同的底层状态。我怎么能回避这个?

0 投票
1 回答
4019 浏览

scala - 使用 Scalaz Stream 解析任务(替换 Scalaz Iteratees)

介绍

我在许多项目中使用Scalaz 7的迭代器,主要用于处理大型文件。我想开始切换到 Scalaz,它旨在替换 iteratee 包(坦率地说,它缺少很多部分并且使用起来有点痛苦)。

流基于机器(迭代思想的另一种变体),它也已在 Haskell 中实现。我使用了一点 Haskell 机器库,但是机器和流之间的关系并不完全明显(至少对我而言),流库的文档仍然有点稀疏

这个问题是关于一个简单的解析任务,我希望看到使用流而不是迭代器来实现。如果没有其他人超过我,我会自己回答这个问题,但我确信我不是唯一一个正在进行(或至少考虑)这种转变的人,因为无论如何我都需要完成这个练习,我想我还不如在公共场合做。

任务

假设我有一个文件,其中包含已标记化并用词性标记的句子:

每行有一个标记,单词和词性由一个空格分隔,空行表示句子边界。我想解析这个文件并返回一个句子列表,我们不妨将其表示为字符串元组的列表:

像往常一样,如果我们遇到无效输入或文件读取异常,我们希望优雅地失败,我们不想担心手动关闭资源等。

一个迭代的解决方案

首先是一些通用的文件读取内容(它确实应该是 iteratee 包的一部分,它目前不提供任何远程这个高级别的东西):

然后我们的句子阅读器:

最后是我们的解析动作:

我们可以证明它有效:

我们完成了。

我想要的是

或多或少是使用 Scalaz 流而不是迭代器实现的相同程序。

0 投票
2 回答
1042 浏览

output - 构建摩尔机器

我有一个家庭作业问题:

构造一个 Moore 机器,它将一个由 a's b's 和 c's 组成的字符串作为输入,并在每个子字符串 abc 的末尾输出一个包含 1 并且在所有其他位置包含 0 的字符串。例如输入,aabcb 产生输出,000010

我尝试构建,但我走到了死胡同。这是我的尝试: 在此处输入图像描述

如您所见,我无法创建字符串 cccb,而 'abc' 可以输出 0。我觉得我把这个简单的问题复杂化了。

编辑:休息一下,重新做。我认为这是对的,除非有人可以告诉我:

在此处输入图像描述

0 投票
2 回答
1189 浏览

scala - Scala Transducers 和 Clojure Transducers 有什么异同?

Paul ChiusanoRúnar Óli写了一本很棒的书《Scala 函数式编程》。在其中,他们提到了 Scala 社区中一个很少被引用的概念——Transducers。

Scala 中的函数式编程一书中的 Scala 转换器

在 Clojure 社区中,Transducers得到更多的 关注

我的问题是: Scala Transducers **(来自《Scala 中的函数式编程》一书)和 Clojure Transducers之间有什么异同?**

假设:

我知道

  1. 换能器是电气工程概念中的常见说法

  2. 计算机科学中有一个预先存在的概念,称为有限状态传感器

  3. 生物学和心理学有先例采用转导一词

  4. 其他技术书籍(如SICP)已经采用Transducers这个词历史

0 投票
0 回答
361 浏览

python - 使用 python 时 Foma fst 的问题

我正在尝试变形分析包含 txt 文件的完整文件夹。

使用https://code.google.com/archive/p/foma/

这是我编写的代码。我将每个单词传递给 python 中的 foma fst,但是在运行 1900 个文件中的 143 个文件后,循环被无限期卡住了。我尝试在循环中评论 foma 调用 applyup并且文件被写入新文件夹(非根形式),没有任何问题。

有没有人遇到过类似的问题?foma fst 是否对初始化后可以调用的次数有一些限制?

0 投票
0 回答
47 浏览

python - 是否有更有效的方法来寻找等效状态?(有限状态传感器)

我正在尝试在 Python3 中实现 Mihov 和 Maurel ( http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 ) 描述的最小有限状态转换器。我的程序正在运行但需要很多时间,所以我决定使用 cProfile 来确定耗时的部分。结果是这样的:

所以耗时的部分似乎是以下函数(代表 Mihov & Maurel 中的引理 3):

if 条件的以下部分似乎是导致效率低下的原因:

所以我现在的问题是我如何才能更有效地寻找等效状态......

0 投票
1 回答
62 浏览

python - 根据单词的第一个字符生成输出

我正在尝试使用适用于 Python 的赫尔辛基有限状态技术 (HFST) 设置有限状态传感器。

我希望如果单词的第一个字符是“o”,则输出为“正”,并且如果在同一个单词中有字符,则使用正则表达式为每个字符输出空。
但我不只接受“o”。

到目前为止,我从 HFST 教程中得到了什么: