什么是谓词?


75

作为一名业余编码员,我缺少一些基本知识。在过去的几天里,我一直在阅读一些东西,“谓词”一词不断出现。非常感谢您对此问题的解释。


4
这里是我的什么文章是不是一个谓语:blogs.msdn.com/ericlippert/archive/2008/08/19/...享受!
埃里克·利珀特

这样使用谓词,在关系数据库领域比在编程语言中使用谓词更多。
PerformanceDBA

1
dictionary.cambridge.org/us/dictionary/english/predicated上的定义中使用的示例是“销售预测基于经济将增长4%的假设。” 就编程而言,这可以用伪代码表示为if (economy grows by 4%) then "sales forecast is valid" else "sales forecast is not valid"。这里的“谓词”是测试“经济增长了4%”,它很可能实现为返回true或false的函数。简单来说,谓词是“ if”语句中的条件(有时会产生副作用)。
凯西

Answers:


52

谓词的定义是可以在网上找到的各种来源,例如here

一个逻辑表达式,其值为TRUE或FALSE,通常在代码中定向执行路径。

参考:软件测试。马修·海登(Mathew Hayden)


3
这个答案仅部分正确。谓词更具体。这个定义就像是说“藏书人”的定义是读书的人。当“亲书者”一词提供的细节远不止于此。
本·莱什,

3
@blesh您能详细说明一下吗?
aehlke

值得注意的是-答案的关键是术语“表达”
Pete-MSFT 2013年

@PerformanceDBA在您的业力级别上,您可以自由编辑六年前的答案。
aehlke

2
我本来要进行编辑,但不完全确定该如何措辞。答案中的Google图书参考不再有效。
蒂芙尼

40

正确或错误的陈述。在编程中,通常是一个为某些输入返回布尔值的函数。

我猜最常在高阶函数的上下文中使用。例如,filter在许多语言中,该函数都是一个谓词和一个列表作为参数,并返回该列表中谓词为真的项目。

JavaScript中的示例:

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

该函数lessThanTen是此处的谓词,适用于列表中的每个项目。当然,布尔表达式可以代替函数用作谓词,例如filter(true)将返回完整列表,filter(false)空列表。


所以基本上它是一个逻辑(布尔)表达式?
Maciek

2
是的,但是由于谓词可能依赖于变量,因此将其视为函数可能更自然。
JacquesB

命题是(对或错)陈述。谓词是从元组到命题或命题真相的映射/函数。
philipxy

18

谓词不仅仅是一个计算结果为true或false的表达式,还有更多内容。术语“谓词”用于表示确定某项是正确还是错误的表达式。换句话说,它会做出一个断言并根据此结果返回true或false。

例如(在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;
}

我了解我在这里所说的纯粹是语义上的差异,但这就是这个问题的对吗?语义学?


+1 ...在C ++中,所有这些都很容易。谓词是一个函数,其参数全部是按值或const引用,并且其返回类型是a bool
pyon

1
我的答案已经通过使用“表达”一词涵盖了这一细微差别。而且,方法定义不是谓词-甚至不是表达式。您的答案相当混乱和误导。
aehlke'1

4

用非编程术语;一个问题。通常是一个带有占位符(如它们)的一般问题,可以问很多问题。

  • 是红色的吗?
  • 一只狗?
  • 难道他们

2
更具体地说,这是一个是或否的问题。
rlbond

我的语法不是很坚定,但是直到现在,我的印象仍然是谓词是上述问题的答案,而不是问题本身(因此,“这是红色的。”,“这是一条狗”归他们所有。”)您能否澄清?两者都正确吗?
康拉德·鲁道夫2009年

1
我从我的逻辑课知道,在形式逻辑中,谓词是函数模拟。因此,在这种情况下,这是问题,而不是答案。我不太确定普通英语。
BCS

4

基本评估结果为布尔值1。它通常是指表示此类型求值的函数或对象。

1:布尔值使用宽松,不一定引用声明的boolboolean


在布尔逻辑的意义上,我使用了布尔。 en.wikipedia.org/wiki/Boolean_logic。布尔逻辑与语言无关。
C. Ross,

4

首先,让我们看一看常规字典,看看它对谓词的含义是什么:

牛津美国词典(1980):

。句子的一部分,关于语法主题,例如“生命短暂”中的“短暂”

这是另一句话:“约翰很高。” 谓词“很高”。如您所见,它修饰或描述了主题,另一个类似于predicateis的术语adjective。本质上,它是一个修饰符。

IBM的技术词汇表提供了几种定义,但是最合适的是这个定义:

用作过滤器一部分的表达式,由数据项,运算符和值组成

这是使用SQL的示例:

SELECT name
FROM tableA
WHERE name = "john";

此代码中的谓词为name = "john"。它具有IBM定义的所有组成部分,也符合谓词的常规定义。主语是name和谓语是name = "john"


2

一个返回布尔值的函数。谓词在功能和OO编程中被大量使用以从数据结构(尤其是列表和其他集合)中选择值的子集。您可以在Haskell和Smalltalk的标准库中找到大量示例。


2

考虑概念的语法含义以推断编程概念可能很有用。

来自维基百科

在传统语法中,谓词是句子的两个主要部分之一(另一个是主语,该谓词对其进行了修饰)。对于简单的句子“ John [is yellow]”,John充当主语,而is yellow充当谓语,随后用动词对主题进行描述。

在当前的语言语义学中,谓词是对某些事物的正确表达。因此,表达“是黄色”或“像西兰花”分别适用于那些黄色或像西兰花的东西。此概念与形式逻辑中的谓词概念紧密相关,谓词包含比前一个谓词更多的表达,例如名词和某些形容词。

用逻辑术语来说:

逻辑运算符,返回true或false。

来自MathWorld


1

我不知道我是否在正确的上下文中讲话,但是PredicateC#中有一个类,该类本质上是一个委托,给定一个项目,该委托确定对象是否满足一组条件。

例如,下面的类型为的方法Predicate<int>可用于选择所有大于5的整数:

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

我不确定这将如何转化为更一般的情况,但这只是一个开始。有关更多信息,请单击此处


我不知道是否有可能创建一个更改对象(ref类型实例)并返回布尔值的函数,并将其分配给Predicate委托。如果可能的话,那么Predicate委托就没有太大意义。
pyon

1

C ++ Primer 5th(§10.3.1):

谓词是可以调用的表达式,它返回可以用作条件的值。

同样在“定义的术语”部分中:

谓词:该函数返回可以转换为的类型bool



0

我发现,围绕谓词的最佳SO答案是一个重复的问题。

总之,在自然语言中,谓语是描述主题的句子部分。

简高个

简是主题,is tall也是谓语。

在计算机科学中,我们对断言某个主题的事实不感兴趣,而只是测试某些事物是真还是假。

jane.isTall();

在这里,简是一个带有谓词方法的对象,该对象将返回true或false。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.