2011-03-26 36 views
0

我有这个谓词,我似乎无法工作。 谓词应按照以下方式使用:给谓词一个事件列表(KnowledgeList)和一个未被实例化的变量(ExtractedList)。 然后谓词应该继续填充ExtractedList。 要填充ExtractedList它遍历KnowledgeList的项目, 将生成一个新的提取事物列表,并将此列表追加到ExtractedList。如何使这个谓词有效?提取知识(SourceList,ExtractedList)

我知道我应该使用递归来解决这个问题,但我现在感觉很难过。

extractedKnowledge(KnowledgeList, ExtractedList) :- 
    list(KnowledgeList), 
    ExtractedList = [], 
    length(KnowledgeList,ListLength), 
    for(X,1,ListLength), 
    nth(X,KnowledgeList,ListElement), 
    ...? 

回答

0

既然你统一ExtractedList其中[],它永远是空的。你应该确实使用递归。这里有一个骨架递归程序,让你开始:

% base case: we can only extract 0 items from 0 items 
extracted_knowledge([],[]). 
% recursive case 
extracted_knowledge([Item|Knowledge], Extracted) :- 
    extracted_knowledge(Knowledge, Extracted0), 
    % build Extracted from Extracted0 by adding Item, 
    % if it needs to be extracted 
+0

谢谢,你帮助我开始。 – danowar 2011-04-16 14:35:35