От новичка до гуру: Курсы программирования на CyberDuff

Путаница в наследовании Prolog

Просто немного запутался в этом сценарии пролога.

  /*frame representation */

   frame(name(bird), isa(animal), hasproperty([fly, feathers, sing])).
   frame(name(canary),isa(bird), hasproperty([yellow, nervous, easily_frightened])).
   frame(name(tweety), isa(canary), hasproperty([baby, my_pet])).
   frame(name(barn_owl), isa(bird), hasproperty([nocturnal,large_eyes])).
   frame(name(barny), isa(barn_owl), hasproperty([sick,forward_facing])).

   /* inheritance -using recursion*/

   inherit(Concept, Prop):- frame(name(Concept), _, hasproperty(Prop)).

   inherit(Concept, Prop):-
       frame(name(Concept), isa(Parent), _),
       write(Parent), nl,
       frame(name(Parent), _, hasproperty(PP)),
       write(PP), nl, 
       inherit(Parent, NewProp).

Я понимаю первое правило, когда оно проверяет, имеет ли понятие определенное свойство, однако я не совсем понимаю второе правило. Я знаю, что оно должно сработать, если фрейм, от которого оно наследуется, имеет определенное свойство, но я не уверен, как это проверяется, особенно когда имена атрибутов варьируются от PP до NewProp. Также как пролог узнает, какое правило выполнять в этом сценарии, если есть два правила с одинаковыми именами? Спасибо за любую помощь!


  • Отвечая на ваш второй вопрос, Пролог запрашивает правила в указанном порядке. Думайте о дополнительных предложениях для одного и того же предиката как об ИЛИ. 05.02.2014
  • Верно! Понятно! Спасибо! 05.02.2014
  • Что на самом деле должен делать код? Вы заметили несоответствие, которым является переменная singleton NewProp. Переменная Prop также является одноэлементной. Так что, наверное, что-то не так с логикой. 05.02.2014

Ответы:


1

Я думаю, что вы хотите сделать во втором предложении для inherit найти родителя вашего понятия, а затем сразу вызвать наследование. Прямо сейчас ты снова делаешь половину этой работы.

inherit(Concept, Prop):- frame(name(Concept), _, hasproperty(Prop)).

inherit(Concept, Prop):-
   frame(name(Concept), isa(Parent), _),
   write(Parent), nl,
   inherit(Parent, Prop).
05.02.2014
  • Ах! Это выглядит намного лучше! Спасибо :) 06.02.2014
  • Новые материалы

    Представляем Narwhal Technologies (Nrwl)
    6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..