Prolog - 如何在指定限制内​​输出结果?

时间:2015-05-09 17:11:09

标签: prolog

感谢您访问我的问题。

我希望程序输出需要条件的数字......

Ex)mid([15,2,30,4,12,3,18],10,20,L2) - > L2 = [15,12,18]

以下是我的代码。

mid(L1,0,0,[]).
mid([L|L1],Min,Max,[L|L2]) :- L>=Min, L=<Max, mid(L1,Min,Max,L2).
min([L|L1],Min,Max,[_|L2]) :- mid(L1,Min,Max,L2).

如果您有任何好的解决方案,请告诉我......

1 个答案:

答案 0 :(得分:0)

mid([],_,_,[]).
mid([X|R], Min, Max, L) :-
    (X >= Min, X =< Max -> L = [X|L1]; L = L1), mid(R, Min, Max, L1).

更新:基于您的代码的另一个答案。您的代码会导致不必要的回溯。您可以使用!运算符阻止它:

mid([],_,_,[]).
mid([X|R], Min, Max, [X|L]) :-
    X >= Min, X =< Max, !, mid(R, Min, Max, L).
mid([_|R], Min, Max, L) :- mid(R, Min, Max, L).