问题标签 [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.
haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?
我想学习这个概念,以便能够理解和使用机器等库。
我尝试关注Rúnar Bjarnason 关于机器的演讲,但信息太少,基本上只是一堆数据类型。k
我什至无法理解里面有什么
或者是什么t
以及为什么要量化。或者,类似管道的库和机器之间的概念区别是什么?
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
haskell - 使用 Data.Machine,您将如何描述一个带有非确定性函数结果的分支计划?
我认为这个问题最好用一个例子来说明。
包装非确定性函数的类型:
一个例子ND
:
备注:请注意 nd 如何输出一个元组列表,每个元组包含计算结果和一个新的ND
(实际上与原始相同,但我们暂时忽略它)。
现在构建一个从源接收输入并为所有输入运行 nd 的进程。
错误Process
:
备注:上面这个过程是错误的,因为只取了第一个计算结果。理想情况下,该过程应分支为多个并行过程,每个过程产生一个输出 b,并使用其自己的版本递归n'
。最终结果应该是可能结果的列表
用例:
haskell - 使用 Data.Machine,如何将两个 ProcessT 组合在一起来修改两个不同的状态?
假设我有一个修改底层状态的过程Int
:
另一个修改底层状态是[Int]
:
我想这样组合它们:
并像这样运行它们:
但我得到这个错误:
建议 p1 和 p2 应该具有相同类型的基础状态。事实上,一个小实验表明 p1 和 p2 实际上正在修改相同的底层状态。我怎么能回避这个?
scala - 使用 Scalaz Stream 解析任务(替换 Scalaz Iteratees)
介绍
我在许多项目中使用Scalaz 7的迭代器,主要用于处理大型文件。我想开始切换到 Scalaz流,它旨在替换 iteratee 包(坦率地说,它缺少很多部分并且使用起来有点痛苦)。
流基于机器(迭代思想的另一种变体),它也已在 Haskell 中实现。我使用了一点 Haskell 机器库,但是机器和流之间的关系并不完全明显(至少对我而言),流库的文档仍然有点稀疏。
这个问题是关于一个简单的解析任务,我希望看到使用流而不是迭代器来实现。如果没有其他人超过我,我会自己回答这个问题,但我确信我不是唯一一个正在进行(或至少考虑)这种转变的人,因为无论如何我都需要完成这个练习,我想我还不如在公共场合做。
任务
假设我有一个文件,其中包含已标记化并用词性标记的句子:
每行有一个标记,单词和词性由一个空格分隔,空行表示句子边界。我想解析这个文件并返回一个句子列表,我们不妨将其表示为字符串元组的列表:
像往常一样,如果我们遇到无效输入或文件读取异常,我们希望优雅地失败,我们不想担心手动关闭资源等。
一个迭代的解决方案
首先是一些通用的文件读取内容(它确实应该是 iteratee 包的一部分,它目前不提供任何远程这个高级别的东西):
然后我们的句子阅读器:
最后是我们的解析动作:
我们可以证明它有效:
我们完成了。
我想要的是
或多或少是使用 Scalaz 流而不是迭代器实现的相同程序。
output - 构建摩尔机器
我有一个家庭作业问题:
构造一个 Moore 机器,它将一个由 a's b's 和 c's 组成的字符串作为输入,并在每个子字符串 abc 的末尾输出一个包含 1 并且在所有其他位置包含 0 的字符串。例如输入,aabcb 产生输出,000010
我尝试构建,但我走到了死胡同。这是我的尝试:
如您所见,我无法创建字符串 cccb,而 'abc' 可以输出 0。我觉得我把这个简单的问题复杂化了。
编辑:休息一下,重新做。我认为这是对的,除非有人可以告诉我:
scala - Scala Transducers 和 Clojure Transducers 有什么异同?
Paul Chiusano和Rúnar Óli写了一本很棒的书《Scala 函数式编程》。在其中,他们提到了 Scala 社区中一个很少被引用的概念——Transducers。
在 Clojure 社区中,Transducers得到了更多的 关注 。
我的问题是: Scala Transducers **(来自《Scala 中的函数式编程》一书)和 Clojure Transducers之间有什么异同?**
假设:
我知道
python - 使用 python 时 Foma fst 的问题
我正在尝试变形分析包含 txt 文件的完整文件夹。
使用https://code.google.com/archive/p/foma/
这是我编写的代码。我将每个单词传递给 python 中的 foma fst,但是在运行 1900 个文件中的 143 个文件后,循环被无限期卡住了。我尝试在循环中评论 foma 调用 applyup并且文件被写入新文件夹(非根形式),没有任何问题。
有没有人遇到过类似的问题?foma fst 是否对初始化后可以调用的次数有一些限制?
python - 是否有更有效的方法来寻找等效状态?(有限状态传感器)
我正在尝试在 Python3 中实现 Mihov 和 Maurel ( http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 ) 描述的最小有限状态转换器。我的程序正在运行但需要很多时间,所以我决定使用 cProfile 来确定耗时的部分。结果是这样的:
所以耗时的部分似乎是以下函数(代表 Mihov & Maurel 中的引理 3):
if 条件的以下部分似乎是导致效率低下的原因:
所以我现在的问题是我如何才能更有效地寻找等效状态......
python - 根据单词的第一个字符生成输出
我正在尝试使用适用于 Python 的赫尔辛基有限状态技术 (HFST) 设置有限状态传感器。
我希望如果单词的第一个字符是“o”,则输出为“正”,并且如果在同一个单词中有字符,则使用正则表达式为每个字符输出空。
但我不只接受“o”。
到目前为止,我从 HFST 教程中得到了什么: