dcg相关内容

DCG:零次或多次、零次或一次、一次或多次?

在DCG中如何实现:零或多、零或一、一或多个实例? 我说的是伪代码中的以下内容: sentence --> word+ float --> int+, ['.'], int+ nilORa --> a? nilORaaaa --> a* 推荐答案 您可以使用谓词的子句集(或者,在本例中,同一个Dcg的非终结符的dcg产生式集合--dcg产生式是Horn子句的 ..
发布时间:2022-05-28 17:01:03 其他开发

如何在 Prolog 中编写对列表进行操作的函数

如何在 Prolog 中制作一个包含 n 个 a 和 n 个 b 的程序,这里需要注意的是列表中 a 和 b 的数量必须相等,并且列表必须始终以 a 开头并以 b 结束,否则为假.示例:[a,b] 为 true,[a,a,a,b,b,b] 为 true, [a,a,a,a] 是 false 并且 [a,a,a,b,b] 也是假. 这是我尝试做的: 语言B([b]).语言B([b | S]) ..
发布时间:2022-01-12 10:56:42 其他开发

Prolog,查询错误语句时出错

输入:-read_line_to_codes(用户输入,输入),string_to_atom(输入,原子),atomic_list_concat(Alist, ' ', Atoms),短语(句子(S),Alist),行动(S).声明(规则)-->[名词,'is','a',宾语],{ Rule =.. [宾语,名词]}.声明1(规则)-->['A', 名词, 'is', 'a', 宾语], { Ru ..
发布时间:2022-01-12 10:54:27 其他开发

Prolog-将英语翻译成C

我们有一个相对简单的任务,我在理论上理解,但我认为我只是不太理解 Prolog 的语法,不足以将其写入代码.基本上,我们有一个表示 C 中操作的英文符号列表.当它们被传递给我们的 Prolog 程序时,它们被存储为一个列表.例如: 将 4 加到 3 是 [add, 4, to, 3] 我们需要编写一个函数来获取该列表并返回等效项.所以如果我打电话给 english2C([add,4,to ..
发布时间:2022-01-12 10:52:16 其他开发

翻译为 DCG Semicontext 不起作用

由于这个问题使用列表,我想用DCG解决它.在这个过程中,我意识到可以使用半上下文.(DCG 入门) 最初的问题是返回列表中项目的计数,但如果两个相同的项目彼此相邻,则不要增加计数. 虽然我的代码适用于某些测试用例,但它不适用于其他测试用例.这只是一个失败的条款.在使用调试器查看代码时,似乎第二个状态变量,即返回的列表,在我认为它应该未绑定时,在调用该子句时被绑定.编辑在下面解决了这部分 ..
发布时间:2022-01-12 10:49:48 其他开发

在 prolog 中读取文件

可能重复: 在Prolog中逐行读取文件 我发现以下序言代码一次读取一个字符并打印出来. 进程(文件):-open('C:/Users/BHARAT/Desktop/a.txt', 读取, In),get_char(In, Char1),process_stream(Char1, In),逼近).process_stream(end_of_file,_):-!.流程流(字符,输入):-打 ..
发布时间:2022-01-12 10:48:04 其他开发

Prolog,从有序列表中重建 BST 树

我们非常了解 BST 树的 inorder 实现. inorder(nil, []).中序(t(根,L,R),列表):-中序(L,ListLeft),中序(R,ListRight),附加(ListLeft,[Root|ListRight],列表). 但是,是否可以为 list 做到这一点?我的意思是重建所有可能的 BST 树,例如: inorder(X, [1,2,3]).X = t(1, ..
发布时间:2022-01-12 10:39:31 其他开发

DCG prolog 测试几句

如果我有以下代码,我将如何让它产生 Answer= 5 和 Answer2= 10?.我运行目标 ?- test(Data),lpsolve(Data, [Answer1,Answer2]). :-use_module(library(clpfd)).test([the, variable, X, is, 五,fullstop,的,变量,Y,是,十,句号]).lpsolve(Data, [An ..
发布时间:2022-01-12 10:35:55 其他开发

如何避免在Prolog中使用assert和retractall来实现全局(或状态)变量

我经常在 Prolog 中编写代码,其中涉及一些算术计算(或整个程序中重要的状态信息),首先获取存储在谓词中的值,然后重新计算值,最后使用 retractall 和 assert 因为在 Prolog 中我们不能使用 is 为变量赋值两次(因此几乎所有需要修改的变量都是全局变量).我开始知道这在 Prolog 中不是一个好习惯.对此我想问: 为什么在 Prolog 中这是一种不好的做法(尽管 ..
发布时间:2022-01-12 10:31:24 其他开发

检查字符串是否是Prolog中的子字符串

有没有办法在 Prolog 中检查一个字符串是否是另一个字符串的子字符串?我尝试将字符串转换为字符列表,然后检查第一组是否是第二组的子集,这似乎不够严格.这是我当前的代码: isSubstring(X,Y):-stringToLower(X,XLower),stringToLower(Y,YLower),isSubset(XLower,YLower).是子集([],_).isSubset([H| ..
发布时间:2022-01-12 10:30:40 其他开发

在 Prolog 中解析多位数字

我有以下简单的表达式解析器: expr(+(T,E))-->term(T),"+",expr(E).expr(T)-->term(T).术语(*(F,T))--> 因子(F),“*",术语(T).项(F)-->因子(F).因子(N)-->nat(N).因子(E)-->“(",expr(E),“)".nat(0)-->“0".nat(1)-->“1".nat(2)-->“2".nat(3)-->“ ..
发布时间:2022-01-12 10:29:56 其他开发

读取序言中的输入并打印结果

我正在学习 Prolog 的想法,这是我想要练习的内容: 我想写一个可以这样工作的Prolog程序: ?- 输入([apple,is,fruit]).?- 输入([鸡,是,肉]).?- 输入([是,苹果,肉]).不,是水果?- 输入[(是,鸡,肉])是的. 当我试图实现这个程序时,我遇到了一些问题: (1) 我使用这段代码试图读取输入并区分问题和断言,但它失败了: 输入([]). ..
发布时间:2022-01-12 10:28:51 其他开发

扩展至 CFG,它是什么?

考虑以下对上下文无关文法的扩展,它允许规则在左侧具有一个(或多个)终结符,位于非终结符的右侧.即形式的规则: A b ->... 右边可以是任何东西,比如上下文无关语法.特别是,不是要求,右侧的末尾将具有完全相同的终端符号.在这种情况下,此扩展将是上下文相关的.但终端不仅仅是一个上下文.有时,这个终端被称为“推回". 显然,这不再是 CFG(类型 2).它包括类型 1.但它是什么?真的已 ..

Prolog:将 DCG 语法与其他限制相结合

Prolog 的 DCG 给我留下了深刻的印象,我能够以多快的速度生成适合特定语法的所有可能结构. 但我想将此搜索与其他约束结合起来.例如,定义一个复杂的语法并要求 Prolog 生成所有不超过 10 个单词的句子.或者所有不重复同一个词两次的句子. 是否可以将这样的额外约束添加到 DCG 语法?还是我基本上必须将 DCG 翻译回普通的 Prolog 子句并开始修改它们? 解决方 ..
发布时间:2022-01-12 10:26:37 其他开发

在 Prolog 中解析表达式并返回抽象语法

我必须编写 parse(Tkns, T),它以记号列表的形式接受数学表达式并找到 T,并返回表示抽象语法的语句,尊重操作顺序和关联性. 例如, ?- parse( [ num(3), plus, num(2), star, num(1) ], T ).T = 加(整数(3),乘(整数(2),整数(1)));不 我尝试如下实现 + 和 * parse([num(X)], integer( ..
发布时间:2022-01-12 10:25:29 其他开发

用 Prolog 编写的正则表达式解析器

几个小时以来,我一直在努力解决这个家庭作业问题.我们必须用 Prolog 解析一个正则表达式.在大多数情况下,我使用的谓词都有效,但是有一些正则表达式和字符串组合会导致它们在 SWI-Prolog 中耗尽堆栈空间.这是一个包含两个正则表达式字符串组合的示例,一个有效,一个无效: star(star(char(a))), []星(星(字符(a))),[a] 第一个有效,第二个用完堆栈. 这 ..
发布时间:2022-01-12 10:25:03 其他开发

序言列表高原

刚被介绍给prolog,试图完成一些简单的练习,但我一直在这个问题上卡住了.我正在尝试编写一个输出输入列表的所有子列表的程序,其中每个子列表的长度> 1,并且不能扩展到更大的子列表.它还将输出子列表列表中的起始位置.所以一个示例输出将是 |?- 高原([a,a,b,2,2,2,a+1,a+1,s(1,2)], I, Len).我 = 1,连 = 2 ?;我 = 4,连 = 3 ?;我 = 7,连 ..
发布时间:2022-01-12 10:17:55 其他开发