У меня довольно простая (я полагаю) проблема в Prolog (SWI-Prolog), но я не могу понять это.Prolog: Использование рекурсивного метода = ../2 (Univ)
Я хочу создать рекурсивный предикат, который может поменять любой вложенный список на составной.
Я хочу поменять местами между этими двумя представлениями, потому что я использую заменяющий алгоритм, который работает в представлении списка, и я хочу, чтобы составное представление представляло собой результат.
Так что я хотел бы:
list_2_compound(List,Compound).
который, например, работает как
list_2_compound([seq, [seq, [if, p1, p2], p2], p1, p3], Compound).
Compound = seq(seq(if(p1, p2), p2), p1, p3)
Так что я, как правило, требуется использовать = оператор ..:
Compound =.. [if, p1, p2]
Compound = if(p1,p2)
Но теперь в рекурсивный путь к вложенному списку.
Это не невероятно сложно понять, но и не тривиально. Что вы пробовали? Вы придумали базовый корпус? –
Хорошо, что базовый регистр будет list_2_compound (X, Y): - Y = .. X. Полагаю. Но у меня есть некоторые проблемы в рекурсивном случае, потому что у меня есть X как список, а Y как термин, я также не уверен, что базовый случай поэтому правильный. – patta1986