相关疑难解决方法(0)

使Prolog目标的"确定性成功"明确

一些Prolog目标确定性成功的问题一次又一次地出现 - 至少 - 以下问题:

使用了不同的方法(例如,引发某些资源错误,或仔细查看Prolog toplevel给出的确切答案),但它们对我来说都有点不合适.

我正在寻找一种通用的,可移植的,符合ISO的方式来查明某些Prolog目标(成功)的执行是否会留下一些选择点.有些元谓词,也许?

你能否向我提示正确的方向?先感谢您!

prolog

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

AUBUC的Prolog联盟

我最近开始学习Prolog,我无法解决如何组合三个列表的问题.

我能够组合2个列表:

%element
element(X,[X|_]).
element(X,[_|Y]):-
               element(X,Y).

%union

union([],M,M).
union([X|Y],L,S) :- element(X,L),union(Y,L,S).
union([X|Y],L,[X|S]) :- (not(element(X,L))),union(Y,L,S).
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

list prolog

20
推荐指数
2
解决办法
2605
查看次数

如何从SWI-Prolog中的列表中删除重复项?

所以我需要编写一个谓词remove_duplicates/2来删除给定列表中的重复元素.例如:

?- remove_duplicates([a,a,b,c,c], List). List = [a,b,c] Yes

请记住,我只学习SWI-Prolog两天,只了解Prolog的基础知识.这就是我现在所拥有的:

remove_duplicates([H | T], List) :- member(H, T), append(T, [], List1).

这适用于列表,[a,a,b,c]但不适用于尾部中两个元素相同的列表.我想我不得不将Head删除到临时列表,创建一个新的Head并重复谓词.我不知道该怎么做.此外,当Head不在尾部时,例如列表之类的[a,b,b,c,],终端只是说False,因为member(H, T)不是真的.

有任何想法吗?

prolog

8
推荐指数
3
解决办法
2万
查看次数

两个列表的交集和联合

我开始学习prolog(我使用SWI-prolog),我做了一个简单的练习,其中我有2个列表,我想计算他们的交集和联合.这是我的代码工作得很好,但我问自己是否有更好的方法,因为我不喜欢使用CUT运算符.

intersectionTR(_, [], []).
intersectionTR([], _, []).
intersectionTR([H1|T1], L2, [H1|L]):-
    member(H1, L2),
    intersectionTR(T1, L2, L), !.
intersectionTR([_|T1], L2, L):-
    intersectionTR(T1, L2, L).

intersection(L1, L2):-
    intersectionTR(L1, L2, L),
    write(L).


unionTR([], [], []).
unionTR([], [H2|T2], [H2|L]):-
    intersectionTR(T2, L, Res),
    Res = [],
    unionTR([], T2, L),
    !.
unionTR([], [_|T2], L):-
    unionTR([], T2, L),
    !.

unionTR([H1|T1], L2, L):-
    intersectionTR([H1], L, Res),
    Res \= [],
    unionTR(T1, L2, L).
unionTR([H1|T1], L2, [H1|L]):-
    unionTR(T1, L2, L).

union(L1, L2):-
    unionTR(L1, L2, L),
    write(L).
Run Code Online (Sandbox Code Playgroud)

请记住,我想只有1个结果,而不是多个结果(即使是正确的),所以运行代码:

?- intersect([1,3,5,2,4] …
Run Code Online (Sandbox Code Playgroud)

list prolog

6
推荐指数
2
解决办法
3万
查看次数

Prolog - 计算列表中的重复次数

我正在尝试查看列表并计算给定单词出现的次数.到目前为止我有这个:

count_repetitions([_], [], 0).
count_repetitions([Word], [Word|Tail], Count):-
   count_repetitions([Word], Tail, X), 
   Count is X + 1.
count_repetitions([Word], [Z|Tail], Count):-
   Word \= Z, 
   count_repetitions([Word], Tail, Count).
Run Code Online (Sandbox Code Playgroud)

所以查询?- count_repetitions([yes],[yes,and,yes,and,no], X).会给出X = 2.

这似乎有效.现在我需要编写一个谓词,在表单中输出一个包含搜索词及其出现次数的列表X = [(yes - 2)].我完全陷入困境,有什么建议吗?

list prolog

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

标签 统计

prolog ×5

list ×3