Prolog清除不使用剪切的负元素列表
如何在Prolog中编写一个过程,清除其负元素的整数列表并在新列表中返回结果?不使用切割,但可以使用否定 例如:Prolog清除不使用剪切的负元素列表,prolog,Prolog,如何在Prolog中编写一个过程,清除其负元素的整数列表并在新列表中返回结果?不使用切割,但可以使用否定 例如: ?- filter([1,0,-6,7,-1],L). L = [1,0,7]; no 你说得差不多对。 您的解决方案是: filter([],[]). filter([H|T],S) :- H<0, filter(T,S). filter([H|T],S) :- H>=0, filter(T,[H|S]). 你说得差不多对。 您的解决方案是: fil
?- filter([1,0,-6,7,-1],L).
L = [1,0,7];
no
你说得差不多对。
您的解决方案是:
filter([],[]).
filter([H|T],S) :-
H<0,
filter(T,S).
filter([H|T],S) :-
H>=0,
filter(T,[H|S]).
你说得差不多对。
您的解决方案是:
filter([],[]).
filter([H|T],S) :-
H<0,
filter(T,S).
filter([H|T],S) :-
H>=0,
filter(T,[H|S]).
在SWI Prolog中,您可以使用
exclude/3
?- exclude(negative, [-1, -0.5, 0, 0.5, 1], L).
L = [0, 0.5, 1].
如果您对负/1
有定义:
negative(Number) :-
Number < 0.
负数(数字):-
数字<0。
在SWI Prolog中,您可以使用排除/3
?- exclude(negative, [-1, -0.5, 0, 0.5, 1], L).
L = [0, 0.5, 1].
如果您对负/1
有定义:
negative(Number) :-
Number < 0.
负数(数字):-
数字<0。
对最后一种情况使用递归
我会写:
filter([],[]).
filter([H|T],S) :-
H<0,
filter(T,S).
filter([H|T], L) :-
H>=0,
filter(T, S),
append([H],S,L).
过滤器([],[])。
过滤器([H | T],S):-
H=0,
过滤器(T,S),
追加([H],S,L)。
对最后一种情况使用递归
我会写:
filter([],[]).
filter([H|T],S) :-
H<0,
filter(T,S).
filter([H|T], L) :-
H>=0,
filter(T, S),
append([H],S,L).
过滤器([],[])。
过滤器([H | T],S):-
H=0,
过滤器(T,S),
追加([H],S,L)。
过滤器([],[])。过滤器([H | T],S):-H=0,过滤器(T,[H | S])。过滤器([],[])。filter([H | T],S):-H=0,filter(T[H | S])。我在尝试执行代码时出错,请参阅:@Src。请不要误解从这个答案中带回家的实际代码@Src。gusbro不支持上述对过滤器/2
(包括3条条款)的定义。。。事实上,他建议用filter([H | T],[H | S]):-H>=0,filter(T,S)替换最后一个子句。
@repeat你看到我的问题了吗?@Src。对它包含findNegative([H1 | T1],S):-findNegative(T1[H1 | S])。
这是胡说八道。我在尝试执行代码时出错,请参阅:@Src。请不要误解从这个答案中带回家的实际代码@Src。gusbro不支持上述对过滤器/2
(包括3条条款)的定义。。。事实上,他建议用filter([H | T],[H | S]):-H>=0,filter(T,S)替换最后一个子句。
@repeat你看到我的问题了吗?@Src。对它包含findNegative([H1 | T1],S):-findNegative(T1[H1 | S])。
这是胡说八道。