Prolog中的列表拆分
在Prolog中获取错误。 我希望第一个列表中的正数可以被2整除,第二个列表中的负数可以被3整除。 这是我到目前为止编写的代码,但我得到的输出为“false”Prolog中的列表拆分,prolog,swi-prolog,Prolog,Swi Prolog,在Prolog中获取错误。 我希望第一个列表中的正数可以被2整除,第二个列表中的负数可以被3整除。 这是我到目前为止编写的代码,但我得到的输出为“false” split([],[],[]). split([X|L],[X|L1],L2):- X >=0, X mod 2 =:= 0, split(L,L1,L2). split([X|L],L1,[X|L2]):- X<0, X mod 3 =:= 0, split(L,L1,L2). split([]、[]、[])。 拆分
split([],[],[]).
split([X|L],[X|L1],L2):- X >=0, X mod 2 =:= 0, split(L,L1,L2).
split([X|L],L1,[X|L2]):- X<0, X mod 3 =:= 0, split(L,L1,L2).
split([]、[]、[])。
拆分([X | L],[X | L1],L2):-X>=0,X模2=:=0,拆分(L,L1,L2)。
split([X | L],L1[X | L2]):-X您没有为值指定一个子句,这些值不是正的,可以被二除,或者是负的,可以被三除。在这种情况下,您可能不想将其包括在任何列表中,因此:
split([],[],[]).
split([X|L],[X|L1],L2):-
X >= 0,
X mod 2 =:= 0,
split(L,L1,L2).
split([X|L],L1,[X|L2]):-
X < 0,
X mod 3 =:= 0,
split(L,L1,L2).
split([X|L], L1, L2) :-
\+ ((X >= 0, X mod 2 =:= 0); (X < 0, X mod 3 =:= 0)),
split(L, L1, L2).
split([]、[]、[])。
拆分([X | L]、[X | L1]、L2):-
X>=0,
X模2=:=0,
拆分(L、L1、L2)。
拆分([X|L],L1[X|L2]):-
X<0,
X mod 3=:=0,
拆分(L、L1、L2)。
拆分([X | L],L1,L2):-
\+((X>=0,X模2=:=0);(X<0,X模3=:=0)),
split(L、L1、L2)。
您没有为非正的值指定一个子句,这些值不能被二除,也不能被三除。