Recursion 如何使这个谓词工作?extractedKnowledge(SourceList,ExtractedList)
我有一个谓词,我似乎无法开始工作。 谓词应按以下方式使用:为谓词提供一个事物列表KnowledgeList和一个未实例化的变量ExtractedList。 然后谓词应继续填充ExtractedList。 要填充ExtractedList,它会遍历KnowledgeList中的项目, 构建提取内容的新列表,并将此列表附加到ExtractedList 我知道我可能应该使用递归来解决这个问题,但我现在感到很困惑Recursion 如何使这个谓词工作?extractedKnowledge(SourceList,ExtractedList),recursion,prolog,logic,gnu,Recursion,Prolog,Logic,Gnu,我有一个谓词,我似乎无法开始工作。 谓词应按以下方式使用:为谓词提供一个事物列表KnowledgeList和一个未实例化的变量ExtractedList。 然后谓词应继续填充ExtractedList。 要填充ExtractedList,它会遍历KnowledgeList中的项目, 构建提取内容的新列表,并将此列表附加到ExtractedList 我知道我可能应该使用递归来解决这个问题,但我现在感到很困惑 extractedKnowledge(KnowledgeList, ExtractedLi
extractedKnowledge(KnowledgeList, ExtractedList) :-
list(KnowledgeList),
ExtractedList = [],
length(KnowledgeList,ListLength),
for(X,1,ListLength),
nth(X,KnowledgeList,ListElement),
...?
由于统一了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
谢谢,你帮我开始了。