Что такое предикат? - PullRequest
       23

Что такое предикат?

60 голосов
/ 28 августа 2009

Будучи программистом-любителем, мне не хватает фундаментальных знаний. Последние пару дней я читаю некоторые вещи, и слово «предикат» продолжает появляться. Я был бы очень признателен за разъяснения по этому вопросу.

Ответы [ 11 ]

46 голосов
/ 28 августа 2009

Определение предиката, которое можно найти в Интернете в различных источниках, таких как здесь , равно:

Логическое выражение, которое оценивается как ИСТИНА или ЛОЖЬ, обычно для направления пути выполнения в коде.

Ссылка: Тестирование программного обеспечения. Мэтью Хейден

34 голосов
/ 28 августа 2009

Заявление, которое является истинным или ложным. В программировании обычно это функция, которая возвращает логическое значение для некоторого ввода.

Чаще всего (я думаю) используется в контексте функции более высокого порядка. Например. filter - это функция во многих языках, которая принимает предикат и список в качестве аргументов и возвращает элементы в списке, для которых предикат является истинным.

Пример в javascript:

lessThanTen = function(x) { return x < 10; }
[1,7,15,22].filter(lessThanTen) --> [1,7]

функция lessThanTen - это предикат, который применяется к каждому элементу в списке. Конечно, вместо функции можно использовать логическое выражение в качестве предиката, например, filter(true) вернет полный список, filter(false) пустой список.

17 голосов
/ 02 сентября 2009

Предикат - это не просто выражение, которое оценивается как истинное или ложное, это еще не все. Термин «предикат» используется для обозначения выражения, которое определяет , является ли что-то истинным или ложным. Или, другими словами, он делает утверждение и возвращает истину или ложь на основе этого.

Например (в C #):

/*this is a predicate, as it's sole purpose is to make some 
 assertion about something.*/
bool IsNameBob(string name)
{
   return name == "Bob";
}

/*Whereas this is not a predicate, as it's performing an action
 then evaluating to true if it succeeds. */
bool DoSomethingCool() {
   try 
   {
       ImDoingSomethingCool();
   }
   catch
   {
      return false;
   }
   return true;
}

Я понимаю, что я изложил здесь только разницу в семантике, но вот о чем был вопрос? Семантика?

4 голосов
/ 28 августа 2009

В непрограммистских терминах; вопрос . Обычно это общий вопрос с заполнителями (например, it и им ), который можно задать из многих вещей.

  • это красный?
  • Является ли это собака?
  • Является ли это принадлежащим им ?
4 голосов
/ 28 августа 2009

Базовая оценка, которая приводит к логическому значению 1 . Он часто относится к функции или объекту, который представляет оценку этого типа.

1: логическое значение используется свободно, необязательно ссылаясь на объявленные переменные bool или boolean.

3 голосов
/ 05 марта 2015

Сначала давайте взглянем на обычный словарь и посмотрим, что он говорит о предикате:

Оксфордский американский словарь (1980):

п. часть предложения, которая говорит что-то о грамматическом предмете, как «коротка» в «жизнь коротка»

Вот еще одно предложение: «Джон высокий». предикат "высок". Как вы можете видеть, он изменяет или описывает предмет, другой термин, похожий на predicate, равен adjective. По сути это модификатор.

Технология IBM глоссарий предоставляет несколько определений, но лучше всего подходит следующее:

Выражение, используемое как часть фильтра, состоящее из элемента данных, оператора и значения

Вот пример использования SQL:

SELECT name
FROM tableA
WHERE name = "john";

Предикат в этом коде будет name = "john". Он содержит все компоненты определения IBM, а также соответствует обычному определению предиката. Субъект name и предикат name = "john".

2 голосов
/ 07 сентября 2009

Вероятно, полезно учитывать грамматическое значение концепции для экстраполяции концепции программирования.

Из википедии :

В традиционной грамматике предикат одна из двух основных частей предложение (другой предмет, который предикат изменяет). Для простое предложение "Джон [желтый]" Джон выступает в качестве субъекта и является желтый играет роль предиката, а последующее описание предмета во главе с глаголом.

В современной лингвистической семантике Предикат является выражением, которое может быть правда чего-то. Таким образом выражения «желтый» или «как брокколи "верны из этих вещей желтые или похожие на брокколи, соответственно. Это понятие тесно связано с понятием предиката в формальной логике, которая включает в себя больше выражения, чем прежний, вроде бы, например, существительные и некоторые виды прилагательные.

В логических терминах:

Оператор в логике, который возвращает либо правда, либо ложь.

из MathWorld

2 голосов
/ 28 августа 2009

Функция, которая возвращает логическое значение. Предикаты часто используются в функциональном и ОО-программировании для выбора подмножеств значений из структур данных , особенно списков и других коллекций. В стандартных библиотеках для Haskell и Smalltalk вы найдете множество примеров.

1 голос
/ 26 июня 2018

С C ++ Primer 5th (§10.3.1):

Предикат - это выражение, которое можно вызвать и которое возвращает значение, которое можно использовать в качестве условия.

Также из главы Определенные термины раздел:

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

1 голос
/ 28 августа 2009

Я не знаю, говорю ли я в правильном контексте, но в C # есть класс Predicate, который по сути является делегатом, который, учитывая элемент, определяет, отвечает ли объект набору критериев .

Например, следующий метод, который имеет тип Predicate<int>, может использоваться для выбора всех целых чисел больше 5:

public bool MyPredicate(int x)
{
   return x > 5;
}

Я не уверен, как это выражается в более общем случае, но это только начало. Для получения дополнительной информации нажмите здесь .

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