Происходит проверка дружественной структуры функций Пролога unify

Структуру объектов иногда идентифицируют с открытыми картами. Затем они могут быть представлены в виде открытых списков Пролога с использованием оператора (:) / 2 для объединения в пары. Этот термин функции:

Дала бы этот термин Пролога:

      [number:sg, person:3 | _ ]

Код для унификации структуры функций часто приводится как, взятый из этого руководства здесь :

      unify0(Dag,Dag) :- !.         
unify0([Feature:Value|Rest],Dag) :-   
    val(Feature,Value,Dag,StripDag),    
    unify0(Rest,StripDag).

Но это не очень удобно для проверки. Шаблон Dag, Dag вызывает унификацию между фактическим первым аргументом unify0 и фактическим вторым аргументом вызывающего unify0. Эта попытка объединения предпринимается снова и снова.

Есть ли лучшие реализации?

0 ответов

Другие вопросы по тегам