На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Что означает знак ! в турбо прологе?
    Что означает знак ! в турбопрологе? Объясните пожалуйста на простом примере.
      Если я ещё не забыл, то ! инвертирует спешность сопоставления следующего за ним выражения. Если оно сопоставилось успешно, происходит отказ. Если сопоставить выражение не удалось, промежуточные результаты сопоставления отбрасываются (хотя они вроде при неудаче всегда отбрасываются) и выполнение продолжается со следующего выражения.

      К примеру у тебя есть предикат, определяющий отношение родитель-ребёнок, и пара предикатов, определяющих пол. Как определить новый предикат 'брат'?

      ' A является братом B (забыл уже, как комментарии в прологе пишутся)
      брат(A,B) :- родитель(C,B), родитель(C,A), !A is B, мужчина(A)
        Не только, есть ещё так называемое отсечение, которое пишется как голый восклицательный знак. Например,
        ExpandedWrap disabled
          брат(A,B):-женщина(А),!,fail.
          брат(A,B):-родитель(C,B), родитель(C,A), not(A is B).
        В таком коде Пролог вначале проверит, верно ли "женщина(A)", в этом случае А не может быть братом В, поэтому для данного А выполняется возврат значения "ложь", без проверки на наличие родителя С. Отсечение заставляет рекурсивный решатель Пролога прекратить рассматривать последующие условия текущего предиката (здесь "брат"). Более подробное описание отсечения ТУТ.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0213 ]   [ 15 queries used ]   [ Generated: 28.03.24, 14:13 GMT ]