2014-11-25 222 views
3

我想提取從列表元素,並將它們添加到另一個新list.How我能做到這 -在列表中添加元素的Prolog

L=[['abc',18],['bcd',19],['def',20]], 
nth1(Count,L,List1), 
nth1(2,List1,Value), 
**NOW I WANT TO PUT THIS Valie in another new list.So finally new list will have 
    New=[18,19,20]** 

我怎麼可能保持在一個新的列表中添加元素呢? ?

回答

1

看到findall/3和朋友

?- L=[['abc',18],['bcd',19],['def',20]], findall(E,member([_,E],L), R). 
L = [[abc, 18], [bcd, 19], [def, 20]], 
R = [18, 19, 20]. 
3

同樣可以用MAPLIST來實現:

?- maplist(nth1(2), [['abc',18],['bcd',19],['def',20]], R). 
R = [18, 19, 20]. 

nth/3巧合的參數順序?

+1

這是不一樣的,它的更好;與變量一起工作;確保我們有清單。想想'[[abc,18] | nonlist]' – false 2014-11-25 11:40:15

+1

參數順序:它與'arg/3'相同。 – false 2014-11-25 11:59:46

1

假設你的老師希望你對自己的工作進行遞歸的解決方案,你可以簡單地說是這樣的(假設您的示例數據):

slurp([]   , [] ) . 
slurp([[_,X]|Xs] , [X|Ys]) :- slurp(Xs,Ys) .