Превращение отношения в факт - PullRequest
0 голосов
/ 24 января 2019

Я хотел бы задать очень простой вопрос в прологе. У меня есть список списков, который выглядит как [[a_1,a],[a_2,c],[a_3,e,f]]. Я хотел бы создать отношение, которое получает этот список и добавляет инфикс для каждого из этих подсписков. Например, я хотел бы вставить x как инфикс: x([[a_1,a]),x([a_2,c]),x([a_3,e,f]]). Цель состоит в том, чтобы сделать отношение фактом. Я пытался использовать findall, но безуспешно.

Пример:

turn([[a_1,a],[a_2,c],[a_3,e,f]]).

Выход:

[x([a_1,a]),x([a_2,c]),x([a_3,e,f])].

Как это реализовать?

1 Ответ

0 голосов
/ 24 января 2019

[x([a])] само по себе не является фактом . Это просто другая форма Пролог term . факт - это термин, который утверждается в базе данных, не представляет предикат и может быть запрошен. Похоже, вы не хотите преобразовывать в «факты», но вы просто хотите преобразовать в другую форму термина.

В этом случае было бы легко с maplist:

turn_item(X, x(X)).

turn(TermList, NewTermList) :-
    maplist(turn_item, TermList, NewTermList).

Тогда:

| ?- turn([[a_1,a],[a_2,c],[a_3,e,f]], L).

L = [x([a_1,a]),x([a_2,c]),x([a_3,e,f])]

yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...