如何检查第一次出现的数字是否等于x?

时间:2014-11-30 05:51:35

标签: list recursion prolog nested-lists

我正试图找到一种方法来检查嵌套列表中的第一个数字是否等于x。

  

检查(X,L),X =是数字,Y是嵌套列表。

check(2,[a,b[g,4],y,8]).
false

check(2,[a,b[g,2],y,8]).
true

似乎递归会做得最好。但是我仍然不明白如何在Prolog中使用递归来处理它。 我有这个想法,扁平嵌套列表,然后检查第一个元素是否是一个数字,如果它等于X. 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

你的想法必须改进。需要一些代码来匹配第一个事件。我会欺骗':

check(X,L) :- flatten(L,F), include(number,F,[X|_]).

答案 1 :(得分:0)

使用简单的递归可以很好地完成:

check(X,[X|_]) :- number(X).
check(X,[NL|_]) :- is_list(NL), check(X, NL).
check(X,[V|L]) :- not(number(V)), check(X, L).

<强>更新

这解决了@CappelliC找到的问题:

check(X,[X|_]) :- number(X).
check(X,[V|L]) :- not(number(V)), not(is_list(V)), check(X, L).
check(X,[NL|L]) :- is_list(NL), append(NL,L,BL), check(X, BL).

结果:

?- check(2,[a,b,[g,4],y,8]).
false.

?- check(2,[a,b,[g,2],y,8]).
true .