我正试图找到一种方法来检查嵌套列表中的第一个数字是否等于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. 任何人都可以帮助我吗?
答案 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 .