Таким образом, мы можем легко найти и заменить атом другим атомом в Прологе, выполнив что-то вроде:
replace([],A,B,[]).
replace([H|T],A,B,[B|Result]) :-
H=A,
replace(T,A,B,Result),!.
replace([H|T],A,B,[H|Result]) :-
replace(T,A,B,Result).
Я уверен, что есть и другие способы сделать это.
Однако я хочу сделать что-то более сложное. в логике вычислений. Как бы вы сделали что-то вроде замены конъюнкции типа конъюнкта (x, y)
в логическом выражении только на (x, y)? Это похоже на final и replace, но не на атомы. Итак мы могли бы иметь что-то вроде reduce (con (con (x, y), z)).
, которое я хотел бы сократить до ((x, y), z)
.
Это простой пример, состоящий только из союзов, но это то, что я хочу сделать в случае союзов. Если кому-то интересно, это все об описательной логике и табличном методе.
Wh at Я не понимаю, как вы выполняете поиск и замену, когда входные данные на самом деле не являются списком; это структура. Я не понимаю, как вы можете решить эту проблему без использования стандартного [H | T]
трюка с рекурсией и списками. У кого-нибудь есть идеи?
Большое спасибо.