prolog:逻辑编程

时间:2011-02-13 23:46:23

标签: prolog

如何编写Prolog代码,仅从包含数字和字母的列表中选出数字?例如,如果我有[a,b,7,d,3,e,f,5],我想编写给我[7,3,5]的代码。 提前谢谢。

2 个答案:

答案 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: 1prolog dictionary中的函数。

因此,对于这些类型的分配,您需要递归列表。请记住。