@ d0pe, в прологе нет результатов (они существуют в Меркурии и Эрланге, я полагаю), есть только именованные значения, которые указаны / объединены в голове и, вероятно, позже объединены в теле.Выполнение Temp = Res, concatenateTerm (Pred,Temp, Res)
в большинстве случаев не удастся, потому что Temp = Res, Res = do(Pred, Temp)
будет производить бесконечно рекурсивный термин do(Pred, do(Pred, do(Pred, ...)))
(при наличии соответствующего расширения).Я думаю, что это не то, что вы хотите.
Но теперь я понимаю, что вы хотите изменить Res
- это неверное понимание Пролога.Переменных нет, вам следует использовать следующий подход Res0 = initialState, Res1 = do(repair(b), Res0), Res2 = do(clean(a), Res1), Res3 = do(paint(x), Res2).
Возможно, ваше правило будет выглядеть примерно так (см. Примеры обезьяны + банан в прологе):
solve(FinalState, finish, FinalState). % our initial state is our goal
solve(InitState, do(Action, Future), FinalState):-
action(InitState, Action, NewState),
solve(NewState, Future, FinalState).