2011-02-15 68 views
2

我有这样的Prolog代码:序言:嵌套列表

pick_number_simple([],[]). 
pick_number_simple([H|T],[H|T2]):- 
    number(H), pick_number_simple(T,T2). 
pick_number_simple([H|T],T2):- 
    not(number(H)), pick_number_simple(T,T2). 

其获取号码的开出的清单。例如:

pick_number_simple([d,f,7,5,e,3,g], NumList) 

为您提供:

[7,5,3] 

但我想让它得到的数字掀起了嵌套列表。

例如:

pick_numbers_general([a,b,1,[2,[c,3]],d],1,NumList) 

会给你:

[2,3] 

我该怎么办呢?

+0

等待。什么意思是“让它从嵌套列表中获得数字”? pick_numbers_general/3的第二个参数应该做什么?例如,如果我有这个pick_numbers_genera([a,b,1,[2,[c,3]],d],1,NumList),那么我们可以使用 – 2011-02-15 18:04:18

+0

来获取嵌套列表中的数字。我想获得Numlist = [2,3]。 – guest 2011-02-15 18:32:03

回答

1

U可以使用flatten/2 predicate

pick_number_simple([],[]). 
pick_number_simple([H|T],[H|T2]):- 
    number(H), pick_number_simple(T,T2). 
pick_number_simple([H|T],T2):- 
    not(number(H)), pick_number_simple(T,T2). 

pick_numbers_general(List, Num, NumList) :- 
    flatten(List, NestList), 
    pick_number_simple(NestList, NumListAll), 
    findall(X, (member(X, NumListAll),X > Num), NumList). 

所以

?- pick_numbers_general([a,b,1,[2,[c,3]],d],1,NumList). 
NumList = [2, 3] ;