【问题标题】:why does this prolog code return only one result?为什么这个序言代码只返回一个结果?
【发布时间】:2014-01-25 00:21:15
【问题描述】:

我正在为期末考试学习 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].

我做错了什么?

【问题讨论】:

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

标签: prolog


【解决方案1】:

花了好长时间,我一贴在这里就想通了!

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多