2011-02-15 66 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] ;