问题标签 [picat]

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 回答
147 浏览

picat - 如何从 picat 中的 float 中获取 int?

我尝试从 picat 中的控制台(stdin)读取一行作为字符串并得到它的一半:

崩溃error(integer_expected(2.0),slice)

当使用 int 而不是 B - 没有崩溃。那么如何将B变成整数呢?

0 投票
2 回答
189 浏览

grammar - 在 Picat 中使用定句语法

我知道可以在 Picat 中定义明确的子句语法,但语法比 Prolog 中的要冗长得多。在 Prolog 中,定子句语法可以写得更简洁:

令人惊讶的是,Picat 的官方教程并没有提到明确子句语法的语法。是否可以在 Picat 中使用 Prolog 的 DCG 符号?

0 投票
1 回答
141 浏览

prolog - Picat 中是否存在评估构造函数,还是更像 Prolog?

我想在 Picat 中快速创建一个结构。但是在创建结构时应该评估结构的组件。到目前为止,我尝试过,当组件已经是常量时,它给了我一个结构:

但以下不起作用,即应该评估的组件。我期待结果是 X = point(3,12),但它没有给出这个结果:

最短的方法是什么?似乎 Picat ($)/1 运算符类似于 lisp 引号运算符,它阻止了 Picat 评估。剩下的就是 Prolog 统一。以下是 Picat 中 Prolog 统一的一些示例:

与 Prolog 中的表达式一样,例如 1+2 和 3*4 不在 ($)/1 内部计算。也许不可能在 Picat 中评估构造函数,同样,它们目前在标准 Prolog 中也找不到。

0 投票
1 回答
226 浏览

minizinc - 为什么picat说模型不能满足?

求解器picat(v. 2.6#2) 指出示例模型knights.mzn包含在 minizinc 存储库中,因此复制并粘贴:

无法满足:

除了基于(v. ) 之外的所有其他MiniZinc求解器都告诉我模型是可满足的。fzn2smtYices2.2.1

问:这是软件中的错误还是不支持的公式的样本?

0 投票
1 回答
250 浏览

constraint-programming - How to use Picat to create CNF files from Minizinc files?

I'm interested in counting the number of solutions a problem have (not enumerating the solutions). For that, I have tools that uses CNF files. I want to convert Minizinc files (mzn or Flatzinc fzn format) and convert it to CNF.

I learned Picat has the ability to "dump" a CNF file after loading the constraints. Moreover, Picat has a clever Module that interprets basic Flatzinc files. I modified the module fzn_picat_sat.pi to "dump" the CNF file. So, what I do is that I convert a Minizinc file to Flatzinc using mzn2fzn, then I try to convert it to CNF using my (slightly) modified version of fzn_picat_sat.pi.

What I want : I expect Picat to load the Flatzinc files and dump an appropriate CNF file. If the original problems has X solutions, I expect the corresponding CNF to have X solutions.

What happens : Most Flatzinc files I tried worked just fine. But some seem to give unwanted results. For example, the following mzn translate to this Flatzinc file. That file has only 211 solutions, but the CNF file dumped by Picat has over 130k solutions. Many SAT solvers can show that the CNF file has over 211 solutions (for example cryptominisat with the option --maxsol). Weirdly, when I ask Picat to solve the Flatzinc file without translating to CNF, Picat does find only 211 solutions. The problem seems to be somewhere in the translation. Finally, even if the CNF file has the good number of solutions using Picat, I do receive an error % fzn_interpretation_error.

If anyone tried something like that and succeeded, or if anyone knows how to translate from a CP (constraint programming) language to CNF, that would be much appreciated. Thanks everyone.

0 投票
1 回答
44 浏览

list - 整数约束和两个列表的差异

我试图找到一个值score,它可以从两个相等长度的列表中强制计算Xs, Ys为:

所以这个想法是基本上从左到右检查两个列表中的每个元素,如果这些元素相同,则增加分数,否则减少分数。例如:

我想我实际上设法将程序编写为:

当我查询分数时,代码给出了正确的结果:

但是,当我尝试生成产生分数的列表时,代码只生成分数为 3 的相同列表:

我想生成所有列表,对应于所有可能的分数,我觉得我必须修改基本情况,但我不知道如何:)

编辑:我也尝试做一个尾递归类型的解决方案,它在查询分数时再次给出正确的结果,但它只能生成相同的列表。

0 投票
1 回答
150 浏览

list - “生成数字”拼图

我遇到了以下难题,无法在 Picat 中制定解决方案:

您将生成 5 位数字,其中每个数字都在其中,1..5并且与其他数字不同,约束条件是一个数字中使用的任何三个相邻数字都不能用于另一个数字。根据这个规则可以得到多少个不同的数字?

例如,如果我们生成数字12345,则其他数字不能包含123345456,因此以下形式的所有数字都被禁止进入链:

我对如何存储这些“禁止”子列表以及如何在构建数字列表时检查每个数字感到非常困惑。

我的尝试:

我想我设法为给定的链状态生成了有效的“候选人”,但我不知道如何生成这样的链。

评论:情况不对称确实很有趣。如果我们分析状态:

我们看到三个有效/可以附加到该链的候选者是:

显然,如果我们选择Cd3,因为它包含两者453532并且不允许我们选择它之后的任何候选者,所以链结束于N=15

如果我们选择Cd1,它排除Cd3但仍然保留Cd2,因此链继续N=16

同样,如果我们选择Cd2,它排除Cd3但仍然保留Cd1,所以再次N=16是可能的。

因此,一般来说,一些候选者似乎包含(并因此排除)其他候选者,而链的长度取决于我们是否选择这些候选者。

0 投票
2 回答
92 浏览

prolog - Prolog中具有单面统一的Quine算法

SWI-Prolog 的新版本 8.3.19 在新的 Picat 样式规则中引入了单面统一。这可能是对任何 Prolog 系统的一个受欢迎的补充。我想知道我们是否可以重写奎因算法

Quine算法的Prolog实现
https://\stackoverflow.com/q/63505466/502187

Picat 样式规则以及这是否可行?如果是,并且如果 Quine 算法的编写变得更简单,那么 SWI-Prolog 可能通过此添加对社区大有帮助。

有人接受这个挑战吗?SWI-Prolog 8.3.19 已经可以从开发中获得。

0 投票
2 回答
90 浏览

loops - Picat中的分区函数P


在 Prolog 中得到了 Partition 函数 P 的以下实现,取自 Rosetta here

如何在 Picat 中实现相同的功能?
aggregate_all+sum 可以替换为 foreach+:=是真的吗?
Picat 中的 bignums 怎么样?

0 投票
1 回答
38 浏览

picat - 约束中的 Picat 函数

在介绍性练习中,我的目标是生成 0、1 值的模式,并受到各种约束。虽然下面的代码适用于内置 sum/1 函数,但对于手工制作的 sum1/1 版本,它会失败(invalid_constraint_expression)。

创建 sum1 的正确方法是什么?