DCG(Definite Clause Grammars)是一种在Prolog中描述列表的简洁方法。
我正在开发 Prolog DCG 解析器,将字符串标记为特定模式。我的目标是解析像 mul(Number,Number)、do() 和 dont() 这样的标记,同时忽略所有其他模式。 这是我的
我正在寻找扩展 DCG 测试用例。方法 检查 DCG 是否正常运行的测试用例 处理器就结果的行为而言 转换后的规则,而不是其
我正在尝试解决序言中的DCG语法并在一定程度上取得了成功,但我一直在评估涉及此类大括号的表达式。 expr( T, ['(', 5, +, 4, ')', *, 7], []), expr(Z) --> ...
我试图在Prolog中编写一个谓词回文/1,当且仅当其列表输入由回文列表组成时,该谓词才为真。 例如: ?- 回文([1,2,3,4,5,4,3,2,1])。 是真的。 任何...
我在这个语法中遇到了一个关于左递归的小问题。我正在尝试用 Prolog 编写它,但我不知道如何删除左递归。 -> <
TLDR 我有一个常见的模式,总是陷入无限循环。 模式是 s([H|Rest]) --> non_letters、word(H)、non_letters、s(Rest)。 s([]) --> []。 我不能 100% 确定
我正在尝试在 Prolog 中实现数学表达式的 DCG,因为我想做用该语言实现计算器的基本练习,这是我的代码: 莱克斯(添加,'+')。 lex(子, '-'...
我正在尝试编写一个接受 u0v 形式的字符串的 dcg,其中 u 和 v 是字母表 {1, 2, 3} 上的字符串,u 是 revere 中的 v。我所拥有的似乎有效,因为问题的第一个答案......
我正在尝试在 prolog 中使用 DCG 创建斐波那契数列。我有这个作为初学者,但是我不知道为什么代码没有被执行。 下面是代码: 撒谎...
我是 Prolog 新手,注意到 ' 和 " 给出了不同的行为,但很好奇为什么。具体来说,在加载文件时, ?- ['test1.pl']. 有效,而 ?- ["test1 .pl"]。没有。
鉴于程序 foo([]) --> []. foo([开始|休息]) --> 字母数字(开始), foo(休息)。 alphanum(Ch) --> [Ch], { char_type(Ch, alnum) }. 我怎样才能使查询 length(I, 2), phrase(foo(C)...
我想在 Prolog 中替换 DCG 语法中的一系列标记。换句话说,用子列表 B:[b] 替换序列或子列表 A:[a,a,a,a]。 链 -->
我想找到最雄辩和最有效的方法,从算法上讲,来计算 SWI-Prolog 中某些模式的出现次数。 现在,我的解决方案使用 DCG,如下所示:
我的Prolog代码如下:expression-->first,operator,second.first-->[X].operator-->['+'];['-'].second-->[X]. 编译后,机器在命令中响应 "是"......。
在Prolog中处理语法规则时,是否可以定义无限数量的终端?下面的例子描述了这个问题:selection-->([if,'('),condition,[')',then,'{'],...。
我正在写一个Lisp到C的翻译器,我有一个处理字符串的问题。这是一段将单利斯普函数转换为C语言等价函数的代码: define(F) --> fun_unary(F),!fun_unary(F) ...
我希望有一些更通用的解析器,比如说paren,它可以接受一个解析器,并用括号把它包起来:paren(Parser, Result) --> "(", some_magic_dcg_call(Parser, Result), "...
我如何在prolog中建立一个谓词,接收一个数字和一个列表,我必须通过尾部插入列表中的数字我试过通过头部插入列表中的数字:insert(H,[根据需要扩展它并 "返回"。
我在理解Prolog中DCG的语法和用法时遇到麻烦。我正在使用的代码是一种语法解析器,类型为“ a = 1 * 2 +(3-4)/ 5”,这里是对它的选择:factor(factor(...( >
我在理解Prolog中DCG的语法和用法时遇到麻烦。我正在使用的代码是一种语法解析器,类型为“ a = 1 * 2 +(3-4)/ 5”,这里是对它的选择:factor(factor(...( >