У меня есть конкретная проблема, но я просто попробую придумать общий вопрос, чтобы другие тоже могли извлечь из него пользу ...
У меня есть предикат, который возвращает много решенийто есть
X=5;
X=2;
X=7
, и я хочу предикат, который получает каждое из этих решений и утверждает их как факты Пролога, поэтому в этом случае я получаю три фактанапример,
fact(5)
fact(2)
fact(7)
так что вызов fact(5)
будет правдой, но вызов fact(8)
будет ложным, потому что мы никогда не утверждали это, потому что это не было решением.
Но я не хочу иметь предикат, в котором вы должны постоянно просить решения для утверждения каждого отдельного факта.Я хочу вызвать предикат, чтобы он прошел через все решения в фоновом режиме, утвердил их и все.
Один из способов ее решения - использовать findall, чтобы поместить все решения в список, а затем просто пройти по списку, утверждая каждый элемент списка.Тем не менее, я не думаю, что это очень элегантно.Должен быть более хороший способ сделать это, не возиться со списками.