2011-03-31 82 views
1

我想要一个函数,它将采用两个列表A和B并返回列表Aout和Bout,以便从A的开始到给定元素(例如原子'a ')已被删除并附加到B的末尾,丢弃角色。我的尝试如下:从一个列表中获取元素并追加到其他

% usage: take_while(A, Aout, B, Bout) 

take_while([], [], B, B). 

take_while(['a'|As], As, B, B). 

take_while([A|As], As, B, Bout) :- 
     append(B, [A], Bout), 
     %take_while(??? 

最后一项可能是错误的做法。我该怎么做呢?

+0

现在想起来,'take_until'本来应该是名称... – Koen 2011-03-31 13:40:29

回答

0

看起来你需要简单地将调用take_while添加到最后一个子句:(实际上,我不确定为什么需要第二个参数,所以我将它从这个答案中删除)。

take_while([], [], B, B). 

    take_while(['a'|As], As, B, B). 

    take_while([A|As], ARem, B, Bout) :- 
      append(B, [A], BTemp), take_while(As, ARem, BTemp, Bout). 
+0

第二个参数是有,因为我需要修剪的名单答:我现在如何才能访问它? – Koen 2011-03-31 13:50:59

+0

@Koen在这种情况下,就把它留在那里吧。我将编辑我的答案以适应。 – 2011-03-31 13:57:15

相关问题