在 Prolog 中解析多位数字

2023-11-26

我有以下简单的表达式解析器:

expr(+(T,E))-->term(T),"+",expr(E).
expr(T)-->term(T).

term(*(F,T))-->factor(F),"*",term(T).
term(F)-->factor(F).

factor(N)-->nat(N).
factor(E)-->"(",expr(E),")".

nat(0)-->"0".
nat(1)-->"1".
nat(2)-->"2".
nat(3)-->"3".
nat(4)-->"4".
nat(5)-->"5".
nat(6)-->"6".
nat(7)-->"7".
nat(8)-->"8".
nat(9)-->"9".

但是,这仅支持 1 位数字。在这种情况下如何解析多位数字?


使用累加器变量,并在递归调用中传递这些变量。下面,A和A1是累加器。

digit(0) --> "0".
digit(1) --> "1".
% ...
digit(9) --> "9".

nat(N)   --> digit(D), nat(D,N).
nat(N,N) --> [].
nat(A,N) --> digit(D), { A1 is A*10 + D }, nat(A1,N).

请注意,第一个nat子句通过使用数字来初始化累加器,因为您不想匹配空字符串。

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

在 Prolog 中解析多位数字 的相关文章

  • Prolog - 递归列表构建

    对于我正在编写的程序 我需要创建一个列表列表 其中包含代表乘积的数字对和两个给定数字的总和 现在我有一个函数 我可以指定将列表添加到列表中的次数 稍后将使用完整功能进行扩展 这是我所拥有的 s1 0 X s1 Q X N is Q 1 mu
  • 如何使用 Prolog 查找二叉树的深度

    我正在学习 Prolog 并试图找到一个深度二叉树使用 Prolog 我代表一棵树是这样的 nil is a tree tree 1 nil nil this is a leaf tree 1 tree 1 nil nil nil this
  • AllegroGraph 检查现有三元组

    我正在使用 AllegroGraph 4 我有一个三元组存储 并且只有在新的三元组尚不存在时我才会尝试添加它们 这是我的 Prolog 查询 select news alfas news a news tst has annotation
  • 关于构建列表直至满足条件

    我想解决 巨猫军团之谜 https youtu be YeMVoJKn1Tg由 Dan Finkel 使用 Prolog 编写 基本上你从 0 然后使用以下三个操作之一构建此列表 添加5 添加7 或采取sqrt 当您成功建立一个列表后 您就
  • 针对数字板难题的优化 CLP(FD) 求解器

    考虑问题从https puzzling stackexchange com questions 20238 explore the square with 100 hops https puzzling stackexchange com
  • Prolog - 删除非唯一元素

    我有一个谓词来检查元素是否是列表的成员 并且看起来如下 member X X member X T member X T 当我打电话时 member 1 2 3 1 4 我明白了 是的 现在我必须使用它来编写谓词 该谓词将从列表列表中删除所
  • Prolog 中的聊天机器人

    我一直在尝试在序言中创建一个聊天机器人 作为作业 到目前为止 我已经在 pl 文件中创建了一个数据库 并且列出了很多可能的对话 我知道序言是这样工作的 例如如果我们有 Chatbot good 然后我们输入 Chatbot good 它会回
  • 如何在 swi-prolog 的 prolog 文件中运行 prolog 查询?

    如果我有一个定义规则的 prolog 文件 并在 Windows 中的 prolog 终端中打开它 它会加载事实 然而 然后它显示 提示我手动输入一些内容 如何将代码添加到文件中 以便它实际上会评估这些特定的语句 就像我输入它们一样 像这样
  • Perl 6 语法与我认为的不匹配

    我正在做代码出现第 9 天 http adventofcode com 2017 day 9 您坐了一会儿并记录了流的一部分 您的谜题输入 这些字符代表组 开头的序列 并结束于 在一个组内 有零个或多个其他东西 用逗号分隔 要么是另一个组
  • Prolog - 从列表中删除具有相同第一个值的对

    我有这样的对象列表 list obj x y obj x z obj a b obj b c 我想删除那些共享相同第一个值的元素 这样我就可以使用修改后的列表 在这种情况下 最终列表将如下所示 list obj a b obj b c 有人
  • Prolog 管线任务

    我有一项任务是在序言中制作一张简化的地铁地图 其中一部分要求制定一项规则来检查两个车站是否在同一条线上 我有一条规则 但它似乎不起作用 这就是我到目前为止所拥有的 adjacent nh lg central 4 adjacent lg o
  • [“03C0”]如何匹配附件P中的语法?

    我正在编写一个工具来使用 2005 年附录 P 中提供的语法来解析 Ada 源文件 通过下面的代码 我知道 03C0 代表 希腊字母Pi 但它是合法的变量名吗 01 package Ada Numerics is 02 Pi constan
  • Prolog 罗马数字(属性语法)

    我正在做一项作业prolog questions tagged prolog扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值 前任 1 roman N I N 1 true 2 当我运行我认为应该工作的程序时 十进制值总是正
  • Prolog 过滤自定义目标失败的所有元素的列表

    我正在尝试写一个谓词filter List PredName Result 过滤一个List目标的所有要素PredName失败并随后返回Result列表 谓词PredName 1应该在调用过程时定义filter 3例如可以是 test N
  • 如何找到排列的索引

    index List Idx Predicate will get List with permutation and I want to know index of permutation For example index 4 1 3
  • Prolog内存问题

    我想找到一种方法来分析我在序言中编写的谓词 一个巨大的谓词 的内存使用情况 我目前正在运行它swi http www swi prolog org and yap http www dcc fc up pt vsc Yap document
  • 用PLY解析python,如何编码缩进和缩进部分

    我试图用 PLY 解析 python 语言的函数定义 我遇到了与缩进相关的问题 例如 对于 for 语句 我希望能够知道块何时结束 我在这里阅读了python语法 http docs python org 2 reference gramm
  • 我应该在 Prolog 和一般情况下避免尾递归吗?

    我正在阅读 立即学习 Prolog 在线书籍 以获取乐趣 我正在尝试编写一个谓词 该谓词遍历列表的每个成员并向其添加一个 使用累加器 我已经在没有尾递归的情况下轻松完成了 addone addone X Xs Y Ys Y is X 1 a
  • 根据一个值找到列表内列表的最小值

    我在序言中有这个列表 dublin london 1000 dublin moscow london 5000 我想计算列表的最小值 这样答案应该是 dublin london 1000 这个问题有一些类似的问题序言中列表列表中的最小值 h
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯

随机推荐

  • 如何从 Azure 应用服务设置 mailSettings - 应用程序设置

    电子邮件服务器的当前设置已签入版本控制
  • kotlin int 盒装身份

    在文档中我们有 请注意 数字装箱不会保留身份 但接下来的例子给出了不同的结果 val number1 127 val b1 Int number1 val b2 Int number1 print b1 b2 this prints tru
  • 如何使用express 4.x获取ip客户端

    我想获取客户端的 IP 我正在尝试使用 localhost 127 0 0 1 但我总是得到 1 我正在尝试使用 app enable trust proxy app set trust proxy loopback app get fun
  • 分支预测与分支目标预测

    我理解得对吗 if语句更依赖于分支预测 v表查找更依赖于分支目标预测 关于v表 没有 分支预测 只有目标预测 尝试了解 CPU 如何处理 v 表 分支预测是预测分支是否会出现taken 分支目标预测就是预测where分行要去 这两件事是独立
  • 如何在 MySQL 中执行 FULL OUTER JOIN?

    我想做一个完全外连接在 MySQL 中 这可能吗 是一个完全外连接MySQL 支持吗 你没有完全连接在 MySQL 中 但你可以确定效仿他们 求一个代码sample转录自这个堆栈溢出问题你有 有两个表 t1 t2 SELECT FROM t
  • 类似于iPhone上的短信应用程序的文本输入框

    我在尝试获取像短信应用程序中那样的输入框时遇到了麻烦 任何人都可以提供一些关于如何构建其中之一并使其看起来不错的指导吗 我需要一个形状与 UITextfield 类似的输入框 但在打字时会垂直拉伸 我假设我需要计算文本的宽度并在文本换行时垂
  • UIButton按下后弹出UIDatePicker

    如何在按下 UIButton 后使 UIDatePicker 弹出 动画 然后在选择日期后再次关闭 这是在 iPhone 上 canihazcode 是的先生 谢谢你帮我拖延时间 void changeDate UIDatePicker s
  • 由于上传亚马逊服务项目而出现 SSLException

    我将文件从 android 上传到 aws 服务 我这样配置 AwsMetadata awsMetadata resultData getParcelable Params CommandMessage EXTRA MESSAGE AWSC
  • 寻求有关 SICP 练习 1.5 的一些解释

    问题可以找到here 在书中 我发现对正常订单评估的描述是 另一种评估模型在需要操作数的值之前不会评估操作数 相反 它会首先用操作数表达式替换参数 直到获得仅涉及原始运算符的表达式 然后执行评估 我还发现了另一个简短的描述 充分扩展然后缩小
  • 如何在 cakephp 上实现 facebook 之类的通知?

    有人知道如何实现类似 facebook 的通知吗 这个想法是在选项卡上放置通知 与数据库中所做的更改并行 而不刷新站点 如果数据被添加到数据库中 站点应该对其做出反应 谢谢 干杯 Facebook 风格的通知是在 Web 应用程序中使用以下
  • jQuery 验证插件:如何将错误视为警告并允许表单提交?

    正如主题所示 我正在使用 bassistance de 验证插件 http docs jquery com Plugins Validation 即使存在验证错误 我也希望能够提交表单 基本上 我们只想使用该插件来警告用户潜在的问题 我知道
  • 用boto设置hadoop参数?

    我正在尝试在我的 Amazon Elastic MapReduce 作业上启用错误输入跳过 我正在遵循这里描述的美妙食谱 http devblog factual com practical hadoop streaming dealing
  • jQuery mobile 是与 PhoneGap 集成的最佳 UI 框架吗?或者我应该使用离子? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想使用 PhoneGap 启动企业应用程序 但不知道所有移动 UI 框架中哪一个最适合与该项目集成 我是 PhoneGap 的新手 如果您想在 jQuery Mobile 和 Ionic
  • 检查一个字符串中的单词是否在另一个字符串中的最快方法是什么?

    我有一串文字 让我们称呼他们吧bad bad foo bar baz 我可以将此字符串保留为空格分隔的字符串 或作为列表 bad bad split 如果我有另一个字符串 如下所示 str This is my first foo stri
  • 在 ASP.NET Web API 中序列化对象时出现循环引用错误

    我正在用 C 编写一个 Web API 项目 该项目使用实体框架从数据库中提取数据 将其序列化并将其发送到客户端 我的项目有 2 个类 Post 和 Comment 来自 Post 的外键 这些是我的课程 岗位课程 public parti
  • Pandas 无法读取在 PySpark 中创建的 parquet 文件

    我正在通过以下方式从 Spark DataFrame 编写镶木地板文件 df write parquet path myfile parquet mode overwrite compression gzip 这将创建一个包含多个文件的文件
  • 使用 Web Audio API 进行离线/非实时渲染

    问题 我正在开发一个 Web 应用程序 用户可以在其中对音频样本进行排序 并可以选择将效果应用到他们使用 Web Audio API 创建的音乐模式 这些模式存储为 JSON 数据 我想对每个模式服务器端的渲染音频进行一些分析 据我所知 这
  • IBM Websphere 的日志文件 (sysout.log) 的位置

    Websphere 应用程序服务器的日志文件 sysout log 在哪里创建 我正在使用Rational softwarearchitect WAS HOME profiles PROFILE NAME logs SERVER NAME
  • 使用 golang 原子 LoadInt32/StoreInt32 (64)

    任何人都可以展示需要使用此类原子操作的示例吗 我不明白之间的区别 import sync atomic var sharedA int64 var sharedB int64 concurent code tmpVarA sharedA t
  • 在 Prolog 中解析多位数字

    我有以下简单的表达式解析器 expr T E gt term T expr E expr T gt term T term F T gt factor F term T term F gt factor F factor N gt nat