问题标签 [sicstus-prolog]

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 投票
1 回答
871 浏览

prolog - 任务计划 sicstus prolog

我最近开始了 sicstus prolog,并有这个作业要使用 CLP(约束逻辑编程)来解决,请帮助我理解问题,我应该寻找什么以及我做错了什么。所以,

某建筑公司:

  • 为了获得原材料,卑诗省必须租用一辆卡车需要 6 天才能运送 25 吨原材料,而且每天的费用为 80 美元。
  • 在地面上建造需要 15 吨原材料,需要 10 天,每层成本 150 美元。
  • 建造地下需要 20 吨原材料,需要 23 天(由于挖掘),成本 150 美元,至少需要一台挖掘机,每天增加 75 美元,挖掘时间减少 3 天(最多两台机器一次时间)。(1->20天,2->17天)
  • 如果租用一台起重机,所有建造时间将减少 25%,费用为每天 120 美元。
  • 电力团队只有在建筑物建成 75% 时才能推进,需要 5 天,每层成本 200 美元。当大楼完工后,还需要一周时间才能完成所有楼层的连接。

BC 假装要建造一个地上 150 层和地下 15 层的摩天大楼,该建筑物必须如何组织才能使利润最大化并缩短所需时间?

将问题定义为约束满足问题并使用 CLP 解决它,以便可以使用不同的参数(或多或少的楼层,或调整团队的清醒时间)来解决它。

到目前为止我所拥有的:

它当然不起作用,因为我不能将累积用于需要 5 个资源的任务,并且 0 个资源的限制是我无法解决的许多问题中的第一个......

0 投票
1 回答
214 浏览

cygwin - 在 Windows7 64 位机器上的 Sicstus Prolog 4.2 中“save_program/1”是否损坏?

我在我的 Windows7 64 位安装中从 Cygwin 提示符启动 sicstus,并创建了一个 prolog 程序。然后我使用以下命令保存了它,该命令在我当前的文件夹中创建了文件“test.sav”。

当我尝试运行此文件时,我收到一条神秘的错误消息:

当我查看文件的头部时,这就是我得到的:

我还尝试以不同的方式加载文件:

有人可以向我解释为什么这不起作用吗?我在这里做错了吗?谢谢!

编辑:根据 Per 的建议,我将文件名从 test.sav 更改为 test.bat。有时候是这样的:

0 投票
1 回答
345 浏览

prolog - 如何将变量域定义为非连续范围

我从 SICStus Prolog 开始,我想定义一个变量,比如说StartingTimes,让域由 list 定义[1, 5, 10]

我怎样才能在 SICStus Prolog 中做到这一点?

我会做类似的事情:

但这太可怕了。必须有一个简单的方法来做到这一点。也许fd_sets

注意:我试图找出它是如何在手册中完成的,但是序言使用了常用词,而且很难使用谷歌来做到这一点。

0 投票
2 回答
372 浏览

prolog - 如何将域变量添加到 global_cardinality?

我正在尝试为global_cardinality我的程序添加一个约束,并且在SICStus Prolog 的手册中写道:

global_cardinality(+Xs,+Vals)

global_cardinality(+Xs,+Vals,+Options)

其中 Xs = [X1,...,Xd] 是整数或域变量的列表,Vals = [K1-V1,...,Kn-Vn] 是对的列表,其中每个键 Ki 都是唯一的整数Vi 是域变量或整数。如果 Xs 的每个元素都等于某个键,并且对于每对 Ki-Vi,则 Xs 的 Vi 元素恰好等于 Ki。

现在我可以写:

说这个号码1会被使用两次。该号码2将只使用一次。

但我想说的是,1将使用该数字:once, twice or three times

根据手册,我需要一个域变量,但正确的语法是什么?

0 投票
1 回答
219 浏览

debugging - 如何调试 clpfd 程序?

我在 SICStus Prolog (clpfd) 中有一个程序,我想看看labeling. 我试过trace了,但它太冗长了,很难理解到底发生了什么(什么值分配给了哪些变量,约束是如何传播的,等等)。

我的程序的缩短版本:

感谢您的任何提示!

注意:我也很想删除“域地狱”,但据我了解 Prolog 我不能使用一个变量(例如 Domain_01)。

0 投票
1 回答
922 浏览

prolog - 是否可以将变量的域设置为 clpfd 中的名称枚举?

我可以通过这种方式指定变量的域:

或者

但我有一个变量,我想这样指定:

有可能做到吗?当然,可以将名称编码为整数,但真的有必要吗?

0 投票
2 回答
80 浏览

prolog - 如何缩短以下程序?

我想缩短以下程序。只是成像有几十个变量,而不是只是XY。问题是我需要分别为每个变量定义域。我不喜欢它,因为它使我的程序更长且更不透明。

输入:

结果:

起初我以为我会简单地通过写来解决它:

但它不起作用,因为 Dom1 将(这是 clpfd 中发生的事情的正确术语吗?)统一为一个值,因此唯一的结果是:

谢谢!

0 投票
1 回答
340 浏览

prolog - 如何为 CLPFD 中的变量赋值?

手册indomain/1中有谓词通过回溯以递增的顺序将值分配给变量(我们称之为 X)。

当我尝试编写自定义标签谓词时,我想更改分配给变量 X 的值的顺序。我想出了这段代码:

但我真的不知道它是否正确。此外,我不确定这是否是正确的方法。

0 投票
1 回答
86 浏览

module - 列出 SICStus Prolog 中模块的所有关系

有没有办法获取在 SICStus Prolog 解释器中加载的模块中定义的所有关系的列表?

0 投票
1 回答
126 浏览

prolog - 如何在 CLPFD 中为以下场景定义变量?

我有一组变量T_1, T_2, ..., T_N,我想在 CLPFD 中重写以下伪代码:

我怎样才能做到这一点?

我会使用count

但我相信更有经验的程序员不会这样写。