问题标签 [dcg]

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.

0 投票
3 回答
1854 浏览

list - Prolog 列出错误:超出全局堆栈

我正在尝试在 prolog 中编写规则 adjacent(X,Y,Zs),就true好像X并且Y在 list 中彼此相邻Zs

我目前有:

测试:

你们有什么想法吗?提前致谢。

0 投票
3 回答
445 浏览

prolog - 你如何将 DCG 翻译成 PROLOG 中的普通定句?

您如何将以下 DCG 翻译成 PROLOG 的普通定句?

编辑:我想将 DCG 翻译成普通的 PROLOG 子句,因为我不能在同一代码中同时使用 DCG 和普通子句(在我的情况下)。我有这两条代码:

件1:

如何使用它的一个例子是:

第 2 部分:

如何使用它的一个例子是:

我想将两个代码合二为一,以测试 traducir 是否写得好(如果它遵循 DCG)并将您输入的内容翻译成文本,因此最终程序应该能够执行以下操作:

0 投票
3 回答
467 浏览

prolog - prolog 搜索列表

我正在尝试比较这些列表。给定函数(List1,List2),List1 的长度为 N,List 2 的长度为 M 且 N>M。

我想检查 List2 的任何排列是否恰好是 List1 的前 M 个字符。

例如,

应该是真实的

应该是假的。

谢谢你。

0 投票
1 回答
273 浏览

unit-testing - 扩展 DCG 测试用例

我正在寻找扩展 DCG 测试用例。是指测试用例,根据生成的转换规则的行为而不是根据其脱糖能力来检查 DCG 处理器的正确功能。

我想我曾经在网上看到过一些这样的测试用例。但我失去了他们的踪迹。现在我只找到以下测试用例:

http://www.sju.edu/~jhodgson/wg17/Drafts/DCGs/test_cases
(此处相同:http ://www.sju.edu/~jhodgson/wg17/dcgs.pdf )

但它们只是外延和内涵的,即它们测试脱糖、转换是否成功或出错。他们甚至没有显示转换结果应该是什么,这并不困扰我,因为我无论如何都在寻找扩展 DCG 测试用例。

欢迎任何指点。

再见

PS:这个显示转换,但它仍然是内涵而不是外延:
http
: //www.sju.edu/~jhodgson/wg17/GRIND.TXT 它有例如:

但是许多 Prolog 系统在 DCG 中对终端、否定等使用不同的方法。所以扩展测试套件会更方便。

0 投票
3 回答
1511 浏览

prolog - Prolog中的扑克牌

我正在尝试编写一个谓词来分析常见的扑克手;例如,给定一个“卡片”列表,确定玩家是否有 4 个同类;3种;对等:我的想法是检查相似的排名,如果没有则删除:

这适用于四种([“A”,“J”,10,“Q”,“A”,“A”,“A”])

但不是所有情况;这里的逻辑有什么指导吗?

谢谢

0 投票
5 回答
20663 浏览

prolog - Prolog - 回文函子

我正在尝试palindrome/1在 Prolog 中编写一个谓词,当且仅当其列表输入由回文列表组成时才为真。

例如:

是真的。

有什么想法或解决方案吗?

0 投票
2 回答
3015 浏览

list - Prolog - 将列表分成 N 部分

我正在尝试编写一个将列表分成 N 部分的谓词。这就是我到目前为止所拥有的。

这个想法是继续将列表的部分切割成另外两个部分,直到我有 N 个部分。我用这种方法得到了平庸的结果:

所以我得到了我想要的,但我得到了两次,还有一些其他的东西。当分成 3 个部分时,情况会变得更糟:

另一个想法是使用前缀,但我不知道这将如何真正起作用。为了使用它,我应该能够让 Prolog 知道它需要一个不太短也不太长的前缀,所以我不会使用一个太长的前缀,所以没有任何东西可以用于下一个递归步骤。

谁能指出我正确的方向?

一点澄清:谓词应该返回将列表分成 N 部分的所有可能性(不包括空列表)。

0 投票
3 回答
183 浏览

prolog - 表中的 Prolog 点

我有一个代表二维列表 x 的给定列表。该表包含两个 1 的“点”,如下例所示:

我只需要将第二个点从 1 更改为 2,如下例所示:

我需要一个谓词separate(L,M),它将采用第一个列表 L 并生成第二个表 M

如果我们可以在不使用任何标准谓词(如“findall”等)的情况下解决这个问题,那就太好了......

0 投票
3 回答
1648 浏览

prolog - 我解决 3 壶水谜题的序言程序有什么问题?

谁能找到为什么我在这段代码中的“开始”无法得到任何真正的答案?例如,我写go(7,3,l)了,我想它应该将 3 升水移到第二个水罐中,但根据序言,这是错误的。怎么了?

0 投票
2 回答
1713 浏览

shell - Prolog 从用户那里获取字符串输入并避免在输入错误的情况下程序终止

我正在尝试在 prolog 中编写一个简单的 shell。我目前使用 read/1 查询用户的输入。

但是,我有两个问题要解决。

1) 用户只能输入条款。

该查询要求用户输入一个术语并要求输入以句点结尾。这是为了限制,因为我希望用户能够输入诸如“将变量设置为值”之类的命令(我将解析此字符串)。有没有办法在序言中读取这些字符串?(如果可能没有任何开销,例如列表表示、报价或结束期间?)

2) 如果用户输入了不正确的内容(例如空格),我会收到语法错误并且 shell 结束。处理这些错误并避免程序终止的快速且正确的方法是什么?

非常感谢所有帮助!