如何编写Prolog代码,仅从包含数字和字母的列表中选出数字?例如,如果我有[a,b,7,d,3,e,f,5],我想编写给我[7,3,5]的代码。 提前谢谢。
答案 0 :(得分:3)
很容易把它放到findall中:
numList(ListIn, Nums) :-
findall(H, (member(H, ListIn), number(H)), Nums).
查询:
?- numList([a,b,7,d,3,e,f,5], Nums).
Nums = [7, 3, 5].
prolog的findall非常有用!
答案 1 :(得分:2)
你必须编写一个函数来返回一个列表。在Prolog中没有返回语句这样的东西,但你也可以使用参数指定out-things。
% The second parameter will be our OUT parameter.
% It can be anything that we specify.
% Return an empty list, because our input is empty as well
numFilter([],[]).
% return a list with H and what will come out recursively
numFilter([H|T],[H|T2]) :- number(H), numFilter(T,T2).
% return a list with what will come out recursively. H is not a number
numFilter([H|T],T2) :- not(number(H)), numFilter(T,T2).
因此,您可以为可能发生在您身上的各种输入指定规则。我们有一个空列表,我们有两个列表至少有一个元素。将检查第一个元素,并以递归方式继续。
我们可以通过这样的调用来调用此函数:
numFilter([a,b,7,d,3,e,f,5],A).
A是一个变量,将在运行时由prolog填充。
number: 1
是prolog dictionary中的函数。
因此,对于这些类型的分配,您需要递归列表。请记住。