为什么这个prolog代码只返回一个结果?

为什么这个prolog代码只返回一个结果?,prolog,Prolog,我正在为期末考试学习序言,从课程开始,我就不知道我在这个作业问题上做错了什么 这并不是一个“家庭作业”问题,而是一个“为最后的问题而学习”,所以如果有人能给我一个正确的答案,那将是一个很大的帮助( 问题是: %% b) Write a predicate after(X, List, Result) that returns everything %% in a list after any occurrence of the given element X. %% ?- after(a,[b

我正在为期末考试学习序言,从课程开始,我就不知道我在这个作业问题上做错了什么

这并不是一个“家庭作业”问题,而是一个“为最后的问题而学习”,所以如果有人能给我一个正确的答案,那将是一个很大的帮助(

问题是:

%% b) Write a predicate after(X, List, Result) that returns everything 
%% in a list after any occurrence of the given element X.
%% ?- after(a,[b,a,x,d,a,f,g],R).
%% R = [x,d,a,f,g];
%% R = [f,g];
%% no
我的解决方案是这样的,但它只为R返回一个值,而不是两个

after(X,[_,X|R],R).

?- after(a,[b,a,x,d,a,f,g],R).
R = [x, d, a, f, g].

我做错了什么?

在这上面花了几个小时,我一贴到这里就发现了

仅供参考,以下是我的解决方案:

after(X,[X|R],R).
after(X,[_|Z],R) :-
    after(X,Z,R).

我花了好几个小时在这上面,一贴到这里就明白了

仅供参考,以下是我的解决方案:

after(X,[X|R],R).
after(X,[_|Z],R) :-
    after(X,Z,R).

您的代码也不适用于除第二个位置之外的任何位置的元素,例如,(a,[a,b,c],R)之后的
.
不起作用。考虑一下如何以通用方式解决它,您可能最终会得到所需的多个结果。您的代码也不适用于除第二个位置以外的任何位置的元素,例如,(a,[a,b,c],R)之后的
.
不起作用。请思考如何以通用方式解决此问题,您可能最终会得到所需的多个结果。