相关疑难解决方法(0)

程序在Prolog中查找每个X列表

我开始学习Prolog.该程序试图获取给定元素的所有出现:

occurences(_, [], Res):- Res is [].
occurences(X, [X|T], Res):- 
    occurences(X,T,TMP),
    Res is [X,TMP].
occurences(X, [_|T], Res):- occurences(X,T,Res).
Run Code Online (Sandbox Code Playgroud)

但这是错误:

?- occurences(a,[a,b,c,a],Res).
ERROR: is/2: Arithmetic: `[]/0' is not a function
^  Exception: (11) _G525 is [] ? creep
   Exception: (10) occurences(a, [], _G524) ? creep
   Exception: (9) occurences(a, [a], _G524) ? creep
   Exception: (8) occurences(a, [c, a], _G524) ? creep
   Exception: (7) occurences(a, [b, c, a], _G524) ? creep
   Exception: (6) occurences(a, [a, b, c, a], _G400) ? creep
Run Code Online (Sandbox Code Playgroud)

recursion runtime-error prolog prolog-dif

4
推荐指数
1
解决办法
854
查看次数

消除连续重复

消除列表元素的连续重复.

我的解决方案是:

compress([X,X|Xs], Q) :-
   compress([X|Xs], Q).
compress([X,Y|Xs], Q) :-
   X \= Y,
   compress([Y|Xs], QR),
   append([X], QR, Q).
compress([X|[]], Q) :-
   compress([], QR),
   append([X], QR, Q).
compress([], []).
Run Code Online (Sandbox Code Playgroud)

并且,由于我是初学者并且我没有逻辑范例的经验,我请求您说出我可以改进的内容以及为什么我的解决方案不尽如人意.

例如,X \= Y对我来说并不漂亮.

list prolog prolog-dif logical-purity

3
推荐指数
1
解决办法
253
查看次数

Prolog:按奇偶校验分区整数列表项

编写一个谓词,它将整数列表作为输入L,并生成两个列表:包含偶数元素L的列表和来自的奇数元素列表L.

?- separate_parity([1,2,3,4,5,6], Es, Os).
Es = [2,4,6], Os = [1,3,5] ? ;
no
Run Code Online (Sandbox Code Playgroud)

prolog clpfd

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

在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
查看次数

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