如何使这个谓词起作用?提取的知识(来源列表,提取列表)

时间:2011-03-26 13:20:43

标签: recursion prolog logic gnu

我有这个断言,我似乎无法开始工作。 应使用以下方式使用谓词:为谓词提供事物列表(KnowledgeList)和未实例化的变量(ExtractedList)。 然后谓词应该继续填充ExtractedList。 要填充ExtractedList,它会遍历KnowledgeList的项目, 构建一个新的提取事物列表,并将此列表附加到ExtractedList。

我知道我应该使用递归来解决这个问题,但此刻我感到难过。

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

1 个答案:

答案 0 :(得分: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