我应该如何删除列表中的非数字使用prolog



我应该删除List中所有不是大于数字的元素。我只能用数字来解。但是当列表有一些符号时,我应该如何删除。这是我的代码

greater_nrs_only( X, List, Ans) :-
greater_nrs_only( X, List, Ans, [] ), !.
greater_nrs_only( _, [], Ans, Ans).
greater_nrs_only( X, [H | Tail], Ans, Acc ) :-
(
( H < X, NewEl = [] )
;
( H >= X, NewEl = [H] )
),
append( Acc, NewEl, NewAcc ),
greater_nrs_only( X, Tail, Ans, NewAcc).

和?-greater_nrs_only(6,[],X(。是错误的

这会出错的原因是H本身不是一个数字,因此例如将6a进行比较会引发错误。您可以使用number/1[swi doc]来检查某个东西是否是一个数字。

您也可以使用include/3[swi-doc]来过滤列表中满足给定谓词的项,而不是手动进行过滤:

greater_than(X, Y) :-
number(Y),
X < Y.
greater_nrs_only(X, L, R) :-
include(greater_than(X), L, R).

最新更新