Prolog 程序用于从结果列表中排除整数



我需要将列表拆分为大于N的列表和小于N的列表,同时忽略任何非整数。它运行良好,除了当我包含非整数时它会引发异常。任何人都可以看到我做错了什么吗:

split([],N, [],[]).
split([HeadOrig | TailOrig], N, L1, TailOrig):- 
+ integer(HeadOrig), 
split(TailOrig, N, L1, TailOrig).
split([HeadOrig|TailOrig],N, [HeadOrig|Tail1],L2):-
integer(HeadOrig), HeadOrig >= N, 
!,
split(TailOrig, N, Tail1, L2).
split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :- 
integer(HeadOrig), HeadOrig < N, 
!,
split(TailOrig, N, L1, Tail2).

问题是该子句中的最后一个术语不应该TailOrig

split([], _, [],[]).
split([HeadOrig | TailOrig], N, L1, L2):-
+ integer(HeadOrig),
split(TailOrig, N, L1, L2),
!.
split([HeadOrig|TailOrig], N, [HeadOrig|Tail1], L2):-
integer(HeadOrig), HeadOrig >= N,
!,
split(TailOrig, N, Tail1, L2).
split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :-
integer(HeadOrig), HeadOrig < N,
!,
split(TailOrig, N, L1, Tail2).

最新更新