用户状态(秒差距)

2024-04-25

我正在使用秒差距解析一个表达式,并且我想使用秒差距中的用户状态来跟踪这些表达式中的变量。不幸的是我真的不知道该怎么做。

给出以下代码:

import Data.Set as Set
inp = "$x = $y + $z"

data Var = V String

var = do char '$'
      n <- many1 letter
      let v = Var n
       -- I want to modify the set of variables here
      return v

parseAssignment = ... -- parses the above assignment

run = case runIdentity $ runParserT parseAssignment Set.empty "" inp of
                   Left err -> ...
                   Right -> ...

So, the u in ParsecT s u m a将会Set.Set。但是我如何将状态更新集成到var?

我尝试过类似的东西modify $ Set.insert v,但这不起作用,因为Set.Set不是一个状态单子。


不幸的是,尤拉斯的建议updateParserState不是最佳的(如果您想修改 Parsec 的内部状态,您可以使用该函数as well);相反,您应该传递一个适用于您的自定义用户状态的函数(即类型u -> u) to modifyState,例如本例中:

expr  = do
  x <- identifier
  modifyState (+1)
  -- ^ in this example, our type u is Int
  return (Id x)

或使用以下任意组合getState and putState功能。对于你的情况,你会做类似的事情:

modifyState (Set.insert v)

See 这个链接 http://hackage.haskell.org/packages/archive/parsec/3.1.1/doc/html/Text-Parsec-Prim.html#v%3aputState了解更多信息。

有关以秒差距处理用户状态的更多类似教程的介绍,这个文件 http://research.microsoft.com/en-us/um/people/daan/download/parsec/parsec.pdf虽然很老,但应该是相关的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户状态(秒差距) 的相关文章

  • 主函数抱怨返回非 IO monad

    import Debug Trace main do trace Main function parses and returns 0 return 这会引发错误 app hs 3 1 Couldn t match expected typ
  • macOS 上的堆栈构建

    我是新来的haskell 我有最简单的程序 usr bin env stack stack resolver lts 13 7 script module Main where import Lib main IO main putStrL
  • 在视图之间传递变量 SwiftUI

    再次基本问题 我想让变量 anytext 对于我要添加的所有未来视图都可见且可访问 在我的例子中 变量将是String 如果是的话 程序会改变吗 Float 我怎样才能将其另存为全局变量 如果我重新启动应用程序 变量会自行删除吗 如何保存即
  • 是否可以对更高种类类型的类实例强制执行类型约束?

    我有一个这样定义的类型 newtype PrimeSet a P Integer deriving Eq 我还定义了一个将素数集转换为列表的函数 假设它的类型参数是Integral toList Integral a gt PrimeSet
  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 如何制作Applicative的固定长度向量实例?

    最近了解了推广 决定尝试写向量 LANGUAGE DataKinds GADTs KindSignatures module Vector where data Nat Next Nat Zero data Vector Nat gt gt
  • 组合 concat 和 map 得到 concatMap:为什么是 f?

    这是我对 Haskell 的第一次探索 如果它很明显 请原谅我 我整个下午都在玩 Haskell 仔细浏览教程HaskellWiki 上的 99 个问题 http www haskell org haskellwiki 99 questio
  • 在 Haskell 中提升 State monad 中的值

    我正在 Haskell 中编写一个数独生成器 求解器作为学习练习 My solve函数接受一个UArray但返回一个State Int UArray 这样它也可以返回解决问题时发现的最大难度级别 到目前为止 这是我的功能 仍处于实验性的早期
  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • 如何在 Yesod 中使用 CSS 框架?

    我想将 Blueprint CSS 框架与 Yesod 一起使用 有没有最佳实践 因为 Yesod 使用 CSS 模板 所以在我看来我不能直接使用 css 文件 我必须将它们重命名为 lucius files 吗 如何将 CSS 添加到 d
  • 类 GADT 类型变量的未来角色?

    A 昨天的问题 https stackoverflow com q 41135212 3072788有一个定义HList 来自HList https hackage haskell org package HList 0 4 1 0 doc
  • 如何使用RecyclerView.State保存RecyclerView滚动位置?

    我有一个关于 Android 的问题RecyclerView State http developer android com reference android support v7 widget RecyclerView State h
  • 在函数调用之间保存数据的Pythonic方式是什么?

    对我来说 上下文是我需要在调用修改该值的函数之间保留的单个 int 的信息 我可以使用全局 但我知道这是不鼓励的 现在 我使用了包含 int 的列表形式的默认参数 并利用了可变性 以便在调用之间保留对值的更改 如下所示 def increm
  • 如何为强制长度为 2^n 的向量类型定义可用的 Applicative 实例

    对于某些应用程序 我需要长度为 2 n 的向量 为了强制某些操作的长度匹配 我使用 ist 应用实例定义了我的类型 如下所示 LANGUAGE GADTs DataKinds FlexibleInstances FlexibleContex
  • 如何让 Show 显示函数名称?

    作为一个让我熟悉 Haskell 的简单练习 在 Youtube 上闲逛并偶然进入美国倒计时游戏节目之后 我想为数字游戏制作一个求解器 你得到 6 个数字 需要将它们与 为了得到给定的结果 到目前为止我所得到的是非常脑死亡的 let ope
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • FocusState Textfield 在工具栏 ToolbarItem 中不起作用

    让我解释一下 我有一个带有 SearchBarView 的父视图 我正在传递这样的焦点状态绑定 SearchBarView searchText object searchQuery searching object searching f

随机推荐

  • 将浏览器配置文件传递给 docker 容器内的 selenium 的正确方法是什么?

    我需要启动selenium inside docker容器 将浏览器配置文件传递给很重要webdriver Here s docker compose version 2 services worker main build app vol
  • facebook-android-sdk 错误:发布共享对话框需要publish_actions

    我需要对我的应用程序进行publish actions才能在用户墙中发布 但它被拒绝了 因为 据说 Facebook不需要publish actions 但我尝试使用共享对话框通过以下代码共享图片 SharePhoto photo new
  • Apache Spark 中的线性回归给出错误的截距和权重

    对 y 2 x1 3 x2 4 的虚拟数据集 y x1 x2 使用 MLLib LinearRegressionWithSGD 会产生错误的截距和权重 实际使用的数据是 x1 x2 y 1 0 1 6 3 2 0 2 8 6 3 0 3 1
  • 通过 Phonegap 连接到 HTTP 服务器

    我有一个服务器组件 它通过 HTTP 连接到远程服务器并获得一些响应 如果我使用 Android 版 Phonegap 我可以连接到 java 插件中的此类服务器端代码吗 您可以使用 javascript 的 xmlHttpRequest
  • 如何在 C# 中异步读取结束进程输出?

    我在 C 中异步读取一个进程的输出时遇到问题 我在这个网站上发现了一些其他类似的问题 但它们并没有真正帮助我 这是我所做的 制定新流程 设置启动信息 文件名 参数 CreateNoWindow true UseShellExecute fa
  • Spark 中的默认分区方案

    当我执行以下命令时 scala gt val rdd sc parallelize List 1 2 3 4 3 6 4 partitionBy new HashPartitioner 10 persist rdd org apache s
  • 如何在 SQL Server 中使用 RANK()

    我使用时遇到问题RANK https msdn microsoft com en us library ms176102 aspx在 SQL Server 中 这是我的代码 SELECT contendernum totals RANK O
  • 使用 Json.format 没有可用的 MyClass 隐式格式

    在 Json format 上使用复杂对象作为另一个对象的属性时出现错误 我有两节课 RoleDTO and 电子邮件邀请DTO 电子邮件邀请DTO has a RoleDTO 所以 我宣布 case class RoleDTO id Op
  • Java正则表达式匹配除

    匹配除特定字符之外的所有字符的正确语法是什么 例如我想匹配除字母之外的所有内容 A Z a z 和数字 0 9 I have string matches A Z a z 0 9 这是不正确的吗 是的 你不需要嵌套 像那样 使用这个代替 A
  • 根据情况启动docker容器

    Problem 我有一个包含 6 个服务的 docker compose yml 当我执行 docker compose up 时 所有 6 个容器都会启动 但我需要 2 个容器来最初开始工作 并根据条件休息 4 个容器 描述 组合中的 6
  • OpenCL 矩阵乘法应该更快?

    我正在尝试学习如何使 GPU 优化 OpenCL 内核 我以使用本地内存中的方形图块进行矩阵乘法为例 然而在最好的情况下 我只得到了约 10 倍的加速 约 50 Gflops 与 numpy dot 相比 5 Gflops 它使用的是 BL
  • 如何使这两个事件的代码简短

    我有以下代码 我怎样才能使它简短 以便它可以通过单击并输入来工作 这样我就不必重复它 document ready function document keypress function e if e which 13 form myfor
  • 如何将存储值分配给隐藏字段

    我有一个模型和商店 我需要为商店中的隐藏字段分配一个值 Ext define loginUser extend Ext data Model fields name id mapping Provider id name name mapp
  • 这个计算Code128条码校验位的代码正确吗?

    根据我对 Code128 条形码 与大多数其他标准条形码类型截然不同 的校验位计算的理解 我下面的代码是正确的 然而 我希望那些可能更了解 有一些经验观察 来自附着在风衣 或实验室 外套上的战壕泥的人进行 健全性检查 这是我的理解 条形码中
  • AngularJs 和 ASP.NET MVC 5 - ng-model 覆盖文本框值

    我有一个使用 ASP NET MVC 5 构建的表单 Html TextBoxFor用我的模型填充表单 例如 在表单导航或服务器端验证失败之后 我现在引入了使用 Angular 的客户端地址查找 这意味着一些表单字段现在用ng model启
  • 如何在R中的approxfun()之后根据y值输入估计x值[重复]

    这个问题在这里已经有答案了 我想用approxfun或类似的方法来估计曲线的函数 然后估计x一个点的值将被赋予一个已知的y value 这是一个简化的示例 y lt seq from 1 to 10 by 1 x lt seq from 0
  • 实体框架的审计跟踪

    我在每个表中都有审计跟踪字段 InsertedBy InsertedDate UpdatedBy 和 UpdatedDate 我构建解决方案以通过覆盖 savechange 来减少冗余 public override int SaveCha
  • 我应该把我的 Hugo 网站图标放在哪里

    我正在使用 Hugo 生成静态站点 我应该把我的favicon ico file 将图标放入静态目录中 静态目录位于hugo 站点的根目录中 当您生成网站时 网站图标将被复制到public 生成站点的根
  • 使用 ffmpeg 转换真实媒体

    我有许多旧的硬壳真实媒体文件需要转换 并希望编写一个脚本来批量处理它们 我可以使用 FFMpegX 进行 Real Media gt AVI 转换 但是当我尝试使用 ffmpeg 复制转换时 它总是会出现如下错误 avi 0x10084fa
  • 用户状态(秒差距)

    我正在使用秒差距解析一个表达式 并且我想使用秒差距中的用户状态来跟踪这些表达式中的变量 不幸的是我真的不知道该怎么做 给出以下代码 import Data Set as Set inp x y z data Var V String var