clpfd相关内容
所以当我实例化我的整数变量时,我所有的树代码都不能正常工作.这是我的意思的一个例子: % 关联一棵树和该树中的节点数(顺序)树顺序(空,0).树顺序(树(_,Left_Subtree,Right_Subtree),顺序):-订单#>0,订单 #= Left_Subtree_Order + Right_Subtree_Order + 1,tree_order(Left_Subtree, Left_
..
我需要创建一个接收数字列表的谓词,并仅打印以 7 结尾且其数字之和大于 100 的数字 我为分离做了谓词,但我需要帮助将两个谓词合并,我的意思是这两个谓词进入一个唯一的谓词,这是我到目前为止所做的: %总和大于 100多(X):-0 是 X 模 100总和([],0).总和([P|Q],Z).多(P),总和(Q,Z1),Z是P + Z1.总和([P|Q],Z).不是多(P),总和(Q,Z)
..
我正在尝试为广义斐波那契数列 (GFS) 的查询找到解决方案.问题是:是否有任何 GFS 的第 12 个数字为 885?前 2 个数字可能被限制在 1 到 10 之间. 我已经找到了在从 (1, 1) 开始的序列中找到第 N 个数字的解决方案,其中我明确定义了初始数字.这就是我所拥有的: fib(1, 1).纤维(2, 1).纤维(N,X):-N#>1、Nmin1 #= N - 1,Nmi
..
我正在使用 clpfd 库处理 (swi) prolog 中的约束. 我试图确定一组约束何时封装或包含另一组约束,例如X<4 封装了X<7,因为只要前者为真,后者就为真.这可以很容易地用逻辑暗示来表示.但是,我无法让 #==> 运算符给我想要的结果,所以我求助于使用 not(Co1 #/\ #\Co2) ,其中 Co1 和 Co2 是约束.这对于单个约束来说很好,但是我想将约束的结合传递给
..
我可以像这样制作升序整数列表: ?- findall(L,between(1,5,L),List). 我知道我也可以使用以下方法生成值: ?- 长度(_,X). 但我认为我不能在 findall 中使用它,就像下面的循环一样: ?- findall(X,(length(_,X),X 我还可以使用 clpfd 生成一个列表. :- use_module(library(clpfd)).
..
如何将a定义为整数/浮点数? 我想找到 a+b+c+d=10 的结果,其中 a,b,c,d 是整数,>=0. 解决方案 这是一个简单、现代、纯 Prolog、非 CLP 库的解决方案: 范围(X):-成员(X,[0,1,2,3,4,5,6,7,8,9,10]).十(A,B,C,D):-范围(A),范围(B),范围(C),范围(D),10 =:= A + B + C + D.
..
min_member(-Min, +列表) 当 Min 是标准术语顺序中的最小成员时为真.如果 List 为空,则失败. ?- min_member(3, [1,2,X]).X = 3. 解释当然是变量在标准术语顺序中位于所有其他术语之前,并且使用了统一.但是,报告的解决方案感觉有些错误. 如何证明它是合理的?我应该如何解释这个解决方案? 编辑: 防止 min_memb
..
当 F 是第 N 个斐波那契数时,术语 fib(N,F) 为真. 以下 Prolog 代码通常对我有用: :-use_module(library(clpfd)).纤维(0,0).纤维(1,1).纤维(N,F):-N#>1、N#=<F + 1,F#>= N-1,F#>0,N1 #= N - 1,N2 #= N - 2,F1 #= 在执行此查询时(在 SICStus Prolog 中),找
..
我有一个序言谓词: Add( [A|B] , Answer ) :-...〜添加列表中的所有内容以得出答案... 我现在想实现 AddUnique,当我给它两次变量时,它将为列表 except 中的所有内容返回唯一值. 这里有一些逻辑上等价的东西: ?- AddUnique([A, B, C], 10). 等价于:?- Add([A, B, C], 10), A !=B, B !=
..
我想计算列表中某个元素的出现次数,如果有,则谓词唯一性为真,否则为假.但是,如果元素出现不止一次,Prolog 会发现它是真的.我不知道该怎么办... count([], X, 0).count([X|T], X, Y) :- count(T, X, Z),Y 为 1+Z,写入(Z).计数([_|T],X,Z):-计数(T,X,Z).唯一(St,[Y|RestList]):-计数([Y|Rest
..
我有这段代码可以将整数转换为罗马数字我需要添加一个函数,将整数与罗马数字输入进行比较,并显示它是 try 还是 false,例如:罗马(v,5).真的 toroman(0).托罗曼(N):- N “我",{ 1 #=
..
我是 Prolog 编程的初学者.我编写了这个程序来计算列表的长度.为什么下面的程序出错了? 长度(0,[]).长度(L+l,H|T):- 长度(L,T). 我写了下面的程序,它可以正常工作. 长度([], 0).长度([H|T],N):- 长度(T,N1),N 为 N1+1. 当我更改订单时,出现错误.为什么? 长度([], 0).长度([H|T],N):- N 是 N1+1,长度(T
..
我读了一篇关于 Prolog 和逻辑编程的简短文章.我很好奇逻辑程序是否可以做代数.就像你能问方程 5+X = 7 中 X 的变量是什么并得到 -2 的答案吗? 解决方案 所有严肃的 Prolog 系统都提供有限域上的约束逻辑编程,简称 CLP(FD),您可以使用它轻松求解许多此类方程.例如,使用 SICStus Prolog、SWI 和 Yap: ?- use_module(libra
..
N皇后问题: 这个问题指出,给定一个大小为 N 乘 N 的棋盘,找出不同的排列方式,其中 N 个皇后可以放在棋盘上,而没有任何人互相威胁. 我的问题是: 程序可以在合理的时间内计算出答案的 N 的最大值是多少?或者到目前为止我们见过的最大的 N 是多少? 这是我在 CLPFD(Prolog) 中的程序: 生成([],_).生成([H|T],N):-H 在 1..N 中,生成(
..
查看以下目标(我正在使用 swi-prolog 和 Markus Triska 的 clpfd): result(Input,Result) :-输入#>10,结果=拒绝.结果(输入,结果):-输入 0..20,结果=报价. 可能的查询如下所示: ?- 结果(15,B).B = 下降;B = 报价. 我想添加订单或某种解决方案优先级.如果 "decline" 是对 Input=15 的有效
..
我在教程中遇到了这种逻辑数的自然数评估,这让我有些头疼: natural_number(0).自然数(s(N)):- 自然数(N). 规则大致规定:如果 N 是 0 这是很自然的,如果不是我们尝试将 s/1 的内容发回递归到规则直到内容为0,则为自然数,否则为非自然数. 所以我测试了上面的逻辑实现,心想,如果我想将 s(0) 表示为 1 和 s(s(0)) 为 2,但我希望能够将 s(0
..
这个问题从 Mat 的 answer 到 枚举二叉树的算法改进只有一个输入值决定二叉树的所有节点的数量,并且需要能够有两个输入值,其中一个是一元的数量节点,另一个是二进制节点的数量. 虽然我能够通过使用 listing/1 得出解决方案 和线程额外的状态变量: e(t, B, B, U, U).e(u(E), B0, B1, [_|U0], U1) :-e(E,B0,B1,U0,U1).e
..
我正在尝试解决 prolog 中的约束处理问题. 我需要在 10x10 的网格中打包 4 个 5x5、4x4、3x3 和 2x2 的正方形.它们不能重叠. 我的变量如下所示: 名称:SqX(i),i=1..10,域:1..10 其中 X 为 5、4、3 或 2.索引 i 表示网格中的行,域表示网格中的列. 我的第一个约束尝试定义正方形的宽度和高度.我这样表述: 约束:SqX
..
在阅读 SICP 时,我遇到了逻辑编程第 4.4 章.然后我开始研究 Prolog 编程语言并尝试理解 Prolog 中的一些简单任务.我发现 Prolog 在数值计算方面似乎有问题. 这是标准 Prolog 中阶乘的计算: f(0, 1).f(A, B) :- A >0,C为A-1,f(C,D),B为A*D. 我发现的问题是我需要引入两个辅助变量(C 和 D),一个新的语法(is)和问
..
我正在尝试理解 N 皇后问题的解决方案,如下所示: :- use_module(library(clpfd)).n_queens(N, Qs) :-长度(Qs,N),Qs ins 1..N,安全皇后(Qs).安全皇后([]).安全皇后([Q|Qs]):-safe_queens(Qs, Q, 1),安全皇后(Qs).安全女王([],_,_).safe_queens([Q|Qs], Q0, D0)
..