Создание предиката из списка

#list #prolog #predicate #term

#Список #пролог #предикат

Вопрос:

Я хочу создать предикат из этого списка. У меня есть список [яблоко, апельсин]. Я пытаюсь создать этот предикат—>

фрукты (яблоко, апельсин).

У вас есть какие-нибудь идеи?

Ответ №1:

Вы можете преобразовать список в термин, функтором которого является заголовок списка, используя =.. (также называемый Univ). Например:

 ?- a(b) =.. [a, b].
true.
  

Вы можете превратить термин в факт в базе данных Prolog с помощью assert/1 .

Таким образом, решение вашего вопроса:

 ?- List = [apple, orange], Term =.. [fruits | List], assert(Term).
List = [apple, orange],
Term = fruits(apple, orange).
  

Теперь вы можете запросить свой новый факт, чтобы убедиться, что он существует:

 ?- fruits(X, Y).
X = apple,
Y = orange.
  

Комментарии:

1. @selda Хорошо, я добавил некоторое объяснение. Это очень простой материал, лучшее объяснение вы найдете в каждой книге по прологу.