2013-04-14 133 views
0

我正在学习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,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]. 

我在做什么错

+0

你的代码也不适用于第二个位置的任何地方,例如'after(a,[a,b,c],R).'不起作用。想想如何以通用的方式解决它,你可能最终会得到多个结果。 – icktoofay

回答

3

在这个小时,并想出它一旦我在这里发布!

只是FYI,这是我的解决方案:

after(X,[X|R],R). 
after(X,[_|Z],R) :- 
    after(X,Z,R). 
相关问题