Was ist ein Prädikat?

74

Als Hobby-Programmierer fehlen mir einige Grundkenntnisse. In den letzten Tagen habe ich einige Dinge gelesen und das Wort "Prädikat" taucht immer wieder auf. Ich würde mich sehr über eine Erklärung zu diesem Thema freuen.

Maciek
quelle
4
Hier ist mein Artikel über das, was kein Prädikat ist: blogs.msdn.com/ericlippert/archive/2008/08/19/… Viel Spaß!
Eric Lippert
Prädikate werden als solche verwendet, viel mehr in der relationalen Datenbank als in Programmiersprachen.
PerformanceDBA
1
Das in der Definition unter dictionary.cambridge.org/us/dictionary/english/predicated verwendete Beispiel lautet "Die Umsatzprognose basiert auf der Annahme, dass die Wirtschaft um vier Prozent wachsen wird." In Bezug auf die Programmierung kann dies im Pseudocode als dargestellt werden if (economy grows by 4%) then "sales forecast is valid" else "sales forecast is not valid". Das "Prädikat" ist hier der Test "Wirtschaft wächst um 4%", der wahrscheinlich als eine Funktion implementiert wird, die entweder wahr oder falsch zurückgibt. Vereinfacht ausgedrückt ist ein Prädikat die Bedingung in einer "if" -Anweisung (manchmal mit Nebenwirkungen).
Casey

Antworten:

51

Die Definition eines Prädikats, das online in verschiedenen Quellen wie hier zu finden ist, lautet:

Ein logischer Ausdruck, der TRUE oder FALSE ergibt, normalerweise um den Ausführungspfad im Code zu steuern.

Referenzierung: Softwaretests. Von Mathew Hayden

aehlke
quelle
3
Diese Antwort ist nur teilweise richtig. Ein Prädikat ist spezifischer als das. Diese Definition ist wie zu sagen, dass die Definition von "bibliophil" jemand ist, der Bücher liest. Wenn der Begriff Bibliophil viel detaillierter ist.
Ben Lesh
3
@blesh kannst du näher erläutern, was es konkret ist?
Aehlke
Bemerkenswert - der Schlüssel zu dieser Antwort ist der Begriff "Ausdruck"
Pete - MSFT
@PerformanceDBA Auf Ihrer Karma-Ebene können Sie meine Antwort von vor sechs Jahren bearbeiten.
Aehlke
2
Ich wollte eine Bearbeitung vornehmen, war mir aber nicht ganz sicher, wie ich sie formulieren sollte. Die Google Buchreferenz in der Antwort funktioniert nicht mehr.
Tiffany
39

Eine Aussage, die entweder wahr oder falsch ist. Bei der Programmierung handelt es sich normalerweise um eine Funktion, die für einige Eingaben einen Booleschen Wert zurückgibt.

Am häufigsten (ich denke) im Zusammenhang mit Funktionen höherer Ordnung verwendet. ZB filterist eine Funktion in vielen Sprachen, die ein Prädikat und eine Liste als Argumente verwendet und die Elemente in der Liste zurückgibt, für die das Prädikat wahr ist.

Beispiel in Javascript:

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

Die Funktion lessThanTenist hier das Prädikat, das auf jedes Element in der Liste angewendet wird. Natürlich könnte ein boolescher Ausdruck anstelle einer Funktion als Prädikat verwendet werden, z. B. filter(true)wird die vollständige Liste, filter(false)eine leere Liste, zurückgegeben.

JacquesB
quelle
Also ist es im Grunde ein logischer (boolescher) Ausdruck?
Maciek
2
Ja, aber da das Prädikat auf Variablen beruhen kann, ist es wahrscheinlich natürlicher, es als Funktion zu betrachten.
JacquesB
Ein Satz ist eine (wahre oder falsche) Aussage. Ein Prädikat ist eine Abbildung / Funktion von einem Tupel auf einen Satz oder auf die Wahrheit eines Satzes.
philipxy
18

Ein Prädikat ist nicht nur ein Ausdruck, der als wahr oder falsch bewertet wird, es steckt noch mehr dahinter. Der Begriff "Prädikat" bezieht sich auf einen Ausdruck, der bestimmt, ob etwas wahr oder falsch ist. Oder mit anderen Worten, es macht eine Behauptung und gibt basierend darauf wahr oder falsch zurück.

Zum Beispiel (in 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;
}

Ich verstehe, was ich hier gesagt habe, ist nur ein Unterschied in der Semantik, aber darum ging es bei dieser Frage, oder? Semantik?

Ben Lesh
quelle
+1 ... All dies ist in C ++ einfach. Ein Prädikat ist eine Funktion, deren Parameter entweder nach Wert oder nach constReferenzen angegeben sind und deren Rückgabetyp a ist bool.
Pyon
1
Meine Antwort deckte diese Nuance bereits mit dem Wort "Ausdruck" ab. Eine Methodendefinition ist auch kein Prädikat - sie ist nicht einmal ein Ausdruck. Ihre Antwort ist ziemlich verwirrt und irreführend.
Aehlke
4

In nicht programmierenden Begriffen; eine Frage . In der Regel eine allgemeine Frage mit Platzhaltern (wie es und sie ), die von vielen Dingen gestellt werden kann.

  • Ist es rot
  • Ist es ein Hund?
  • Ist es im Besitz von ihnen ?
BCS
quelle
2
Genauer gesagt ist es eine Ja- oder Nein-Frage.
Rlbond
Ich bin nicht sehr fest in der Grammatik, aber mein bisheriger Eindruck war, dass ein Prädikat die Antwort auf die obigen Fragen ist, nicht die Frage selbst (also „Das ist rot .“, „Das ist ein Hund .“, „Das ist gehört ihnen . ”) Können Sie das klarstellen? Ist beides richtig?
Konrad Rudolph
1
Ich weiß aus meiner Logikklasse, dass Prädikate in der formalen Logik die analoge Funktion sind. In diesem Zusammenhang ist es also die Frage, nicht die Antwort. Ich bin mir im normalen Englisch nicht so sicher.
BCS
4

Eine grundlegende Auswertung, die einen booleschen 1- Wert ergibt. Es bezieht sich häufig auf eine Funktion oder ein Objekt, das eine Bewertung dieses Typs darstellt.

1: Boolescher Wert wird lose verwendet und bezieht sich nicht unbedingt auf deklarierte Variablen booloder boolean.

Kreuz
quelle
Ich habe Boolesche Werte im Sinne von Boolescher Logik verwendet. en.wikipedia.org/wiki/Boolean_logic . Die boolesche Logik ist nicht sprachabhängig.
C. Ross
4

Schauen wir uns zuerst ein reguläres Wörterbuch an und sehen, was es über ein Prädikat aussagt:

Oxford American Dictionary (1980):

n. ein Teil eines Satzes, der etwas über das grammatikalische Thema sagt, wie "ist kurz" in "Leben ist kurz"

Hier ist ein weiterer Satz: "John ist groß." Das Prädikat ist "ist groß". Wie Sie sehen können, ändert oder beschreibt es das Thema, ein anderer Begriff, der ähnlich ist, predicateist adjective. Im Wesentlichen ist es ein Modifikator.

Das Technologie- Glossar von IBM enthält mehrere Definitionen. Am besten passt jedoch diese:

Ein Ausdruck, der als Teil eines Filters verwendet wird und aus einem Datenelement, einem Operator und einem Wert besteht

Hier ist ein Beispiel mit SQL:

SELECT name
FROM tableA
WHERE name = "john";

Das Prädikat in diesem Code wäre name = "john". Es enthält alle Komponenten der IBM Definition und passt auch zur regulären Definition des Prädikats. Das Subjektwesen nameund das Prädikatwesen name = "john".

Robert Rocha
quelle
2

Eine Funktion, die einen Booleschen Wert zurückgibt. Prädikate werden häufig in der Funktions- und OO-Programmierung verwendet, um Teilmengen von Werten aus Datenstrukturen auszuwählen , insbesondere Listen und andere Sammlungen. In den Standardbibliotheken für Haskell und Smalltalk finden Sie zahlreiche Beispiele.

Norman Ramsey
quelle
2

Es ist wahrscheinlich nützlich, die grammatikalische Bedeutung des Konzepts zu berücksichtigen, um das Programmierkonzept zu extrapolieren.

Aus Wikipedia :

In der traditionellen Grammatik ist ein Prädikat einer der beiden Hauptteile eines Satzes (der andere ist das Subjekt, das das Prädikat modifiziert). Für den einfachen Satz "John [ist gelb]" fungiert John als Subjekt und Gelb als Prädikat, eine nachfolgende Beschreibung des Subjekts mit einem Verb.

In der gegenwärtigen sprachlichen Semantik ist ein Prädikat ein Ausdruck, der für etwas zutreffen kann. Somit gelten die Ausdrücke "ist gelb" oder "ist wie Brokkoli" für jene Dinge, die gelb oder wie Brokkoli sind. Dieser Begriff ist eng verwandt mit dem Begriff eines Prädikats in der formalen Logik, das mehr Ausdrücke als der vorherige enthält, wie zum Beispiel Substantive und einige Arten von Adjektiven.

In logischen Begriffen:

Ein Operator in der Logik, der entweder true oder false zurückgibt.

von MathWorld

Gordon Potter
quelle
1

Ich weiß nicht, ob ich im richtigen Kontext spreche, aber es gibt eine PredicateKlasse in C #, die im Wesentlichen ein Delegat ist, der anhand eines Elements bestimmt, ob das Objekt eine Reihe von Kriterien erfüllt oder nicht.

Mit der folgenden Methode, die vom Typ ist Predicate<int>, können beispielsweise alle Ganzzahlen größer als 5 ausgewählt werden:

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

Ich bin nicht sicher, wie sich dies auf den allgemeineren Fall auswirkt, aber es ist ein Anfang. Für weitere Informationen klicken Sie hier .

Jeremyyan
quelle
Ich weiß nicht, ob es möglich ist, eine Funktion zu erstellen, die ein Objekt (eine Instanz eines refTyps) ändert, einen Bool zurückgibt und ihn einem PredicateDelegaten zuweist . Wenn es möglich ist, macht der PredicateDelegierte nicht viel Sinn.
Pyon
1

Ab C ++ Primer 5. (§10.3.1):

Ein Prädikat ist ein Ausdruck, der aufgerufen werden kann und einen Wert zurückgibt, der als Bedingung verwendet werden kann.

Ebenfalls aus dem Abschnitt Definierte Begriffe :

Prädikat : Funktion, die einen Typ zurückgibt, in den konvertiert werden kann bool.

Rick
quelle
0

Die beste SO-Antwort für Prädikate, die ich gefunden habe, ist eine doppelte Frage.

Zusammenfassend ist in natürlichen Sprachen ein Prädikat der Teil des Satzes, der ein Thema beschreibt.

Jane ist groß

Jane ist das Thema und is talldas Prädikat.

In der Informatik sind wir nicht daran interessiert, eine Tatsache über ein Thema zu behaupten, sondern zu testen, ob etwas wahr oder falsch ist.

jane.isTall();

Hier ist Jane ein Objekt mit einer Prädikatmethode, die entweder true oder false zurückgibt.

cham
quelle