Пример использования функторов в SWI Prolog

      Комментарии к записи Пример использования функторов в SWI Prolog отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Общие вопросы Пример использования функторов в SWI Prolog

Помечено: , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 нед., 3 дн. назад.

  • Автор
    Сообщения
  • #4237

    Задача:

    Разработать правила, реализующие предикат mapop(Op,L1,L2,L3).
    Предикат удовлетворен, если i-ый элемент списка L3 представляет
    собой результат применения инфиксной операции Op к i-ым элементам списков L1 и L2.
    Например:
    ?-mapop(+,[1,2,3],[4,5,6],R). R=[5,7,9]

    В качестве аргумента предикат может принимать оператор. В свою очередь оператор принимает два аргумента и возвращает результат. Сформировать из оператора функтор (объект, который можно вызывать как функцию) можно с помощью оператора =..:
    Functor =.. [Op, A, B].

    Если в этом примере Op будет оператором, то переменной Functor будет присвоено что-то типа 1+5 (в зависимости от значений A и B). Если же Op будет являться функцией, то Functor получит значение типа foo(1,5).

    Для вызова функтора используется функция call, как показано в примере ниже:

    mapop(_Op, [], [], []):-!.
    mapop(Op, [A|AT], [B|BT], [R|RT]):-
      Functor =.. [Op, A, B], 
      call(R is Functor),
      mapop(Op, AT, BT, RT).

    В данном случае функция вызывается для каждой пары элементов исходных списков. Если на вход поданы списки разной длины – функция вернет false.

    Вложения:

Для ответа в этой теме необходимо авторизоваться.