相关疑难解决方法(0)

术语平等/不平等的具体化

纯粹的Prolog程序以清晰的方式区分术语的平等和不平等,导致执行效率低下; 即使所有相关术语都是基础的.

关于SO的最近一个例子是这个答案.在此定义中,所有答案和所有失败都是正确的.考虑:

?- Es = [E1,E2], occurrences(E, Es, Fs).
Es = Fs, Fs = [E, E],
E1 = E2, E2 = E ;
Es = [E, E2],
E1 = E,
Fs = [E],
dif(E, E2) ;
Es = [E1, E],
E2 = E,
Fs = [E],
dif(E, E1) ;
Es = [E1, E2],
Fs = [],
dif(E, E1),
dif(E, E2).
Run Code Online (Sandbox Code Playgroud)

虽然程序从声明的角度来看是完美无缺的,但它在B,SICStus,SWI,YAP等当前系统上的直接执行效率却不必要地低效.对于以下目标,列表的每个元素保留一个选择点.

?- occurrences(a,[a,a,a,a,a],M).
M = [a, a, a, a, a] ;
false. …

prolog prolog-dif

40
推荐指数
3
解决办法
1328
查看次数

在Prolog列表中查找2的幂

我正在尝试在Prolog(SWI Prolog)中创建一个列表,并检查哪些数字是2的幂,然后查找列表中特定数字的次数(在此示例中,我试图查找该数字的次数)列表中有3个).举个例子,如果你问

?- check([0,2,3,-5,-2,1,8,7,4], MULT2, THREE).
Run Code Online (Sandbox Code Playgroud)

你应该看到

MULT2=[2,8,4] 
THREE=1 
Run Code Online (Sandbox Code Playgroud)

我第一次尝试找到一个解决方案是用头部搜索列表并执行头部mod 2 = 0来查找所有2次幂的数字,但是出了点问题我只得到"假"作为答案.

list prolog clpfd clpz

2
推荐指数
1
解决办法
823
查看次数

标签 统计

prolog ×2

clpfd ×1

clpz ×1

list ×1

prolog-dif ×1