繁体   English   中英

前言:逻辑编程

[英]prolog: logic programming

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

轻松将其放入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真的非常有用!

您必须编写一个可以返回列表的函数。 Prolog中没有return语句,但您也可以使用参数指定其他内容。

% 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序言字典中的函数。

因此,对于此类分配,您需要递归列表。 记住这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM