Как мне заставить этот предикат работать?extractedKnowledge (SOURCELIST, ExtractedList) - PullRequest
0 голосов
/ 26 марта 2011

У меня есть этот предикат, который я не могу заставить работать. Предикат следует использовать следующим образом: вы даете предикату список вещей (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 голосов
/ 26 марта 2011

Поскольку вы объединяете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...