请问三值逻辑是怎么一回事!有哪些值

请问三值逻辑是怎么一回事!有哪些值,第1张

你学印第安人的 艾马拉语 就知道,

1、艾马拉语和克丘亚语可能同源 2、艾马拉语和盎格鲁-诺曼语是三值逻辑

3、疑为最古老的语言:亚当的语言 4、也许可作机器翻译的中介语言。

据“物理学家组织”网站13日报道,一项新的针对南美土著的艾马拉人(Aymara)的语言和手势的研究结果显示,与世界上所有已被研究过的文化相比,艾马拉人的时间观念正好相反,也就是说,艾马拉人视“过去”为“未来”,视“未来”为“过去”。

独特的时间观念

人们经常挂在嘴上的一句话说“面向未来”,可是,如果你对一名艾马拉老人“面向过去”,他可能会茫然地看你一眼——因为他已经“面向未来”了。一项新的针对南美本土艾马拉人的语言和手势的研究结果显示,与世界上所有已被研究过的文化相比,艾马拉人的时间观念正好相反。

在很多人的印象里,对于时间的感知,好象地球人都一样,部分基于我们身体的方向和移动,将“未来”置于我们之前,将“过去”置于我们身后。可是,艾马拉人的感知时间的方式并不是这样。对于抽象的时间概念,他们反其道而行之:用“过去”表达“未来”,用“未来”表达“过去”。

最近一期的《认知科学》杂志刊登了由圣地亚哥的加利福尼亚大学具体化认知实验室负责人、认知科学副教授拉夫尔·努纳兹与伯克利语言学教授伊夫·斯威特斯合著的研究报告。努纳兹说:“直到现在,世界上所有已被研究过的语言——无论是欧洲语、玻利尼西亚语还是汉语、日语、班图语等等,这些语言在表达时间方面不仅都利用了空间这个道具,而且都将‘未来’置于我们本人之前,将‘过去’置于我们身后。而艾马拉人的语言却脱离了这种“标准模式”,是第一个有文件记载的将时间概念倒置的民族。”

艾马拉人生活在玻利维亚、秘鲁和智利的安第斯高原,他们的语言在表达时间概念时的独特性早在西班牙最初征服这里的时候就已被西方人注意到了。16世纪初期,一名耶稣会士便记载了艾马拉人特别钟意于抽象的概念。19世纪的时候又被冠以“亚当之语”的美名。就在最近,意大利语言学家安伯托·艾柯还称赞了这个民族使用新词的能力。同时代的研究人员也曾试图解读所谓的“安第斯逻辑”,也就是在通常“对或错”、“是或否”的二进制中增加了第三种选择,希望能够将这种逻辑运用到计算机上。

努纳兹表示,以前还没有人细致分析过艾马拉人“对于时间的完全不同的理解”。这是一种超级基本概念,和“民主”的思想不同的是,艾马拉人的时间概念不依赖于正统的学校教育,显然也不是文化的产物。

英语中也有时间倒置

上世纪80年代初,努纳兹还是一名尚未取得学位的大学生,其在安第斯地区搭便车旅行的经历,让他第一次窥视了艾马拉人和西班牙人在思考问题方面的不同之处。10多年后,努纳兹故地重游收集数据。

在这项研究中,努纳兹收集了与智利北部地区30名艾马拉成年人近20小时的对话。参与研究的志愿者包括仅使用一种语言的艾马拉人、仅懂一种语言的西班牙人以及其他一些人使用两种语言的人,这些人能够熟练地驾驭他们的语言,其中包括西班牙人和艾马拉人通常使用的克里奥尔语,这些人被称为“卡斯特尔诺·安迪诺”。

受访者的录像带的内容特别涵盖了有关过去与未来事件的一般性讨论。研究人员原以为,讨论中使用的语言学对于“过去”和“未来”的表达方式以及下意识的手势,与大多数人经常说的和经常使用的表达方式没有什么大的区别。从表面上看,这个语言学证据好像是比较清晰的:艾马拉人的语言使用“nayra”(“眼睛”、“前面”或“眼界”的基本词)表示“过去”;使用“qhipa”——“后退”或“后面”的基本词表示“未来”。举个例子来说,“nayra mara”应该被翻译为“去年”,但从字面来看却是“明年”的意思。

研究人员发现,仅进行语言分析是不能准确地明白说话者的准确意思的。拿英语这种“外来语”来说,人们可以使用单词“在什么之前”来表达一个较早的时间点。“下午1点之前的20分钟。”意识就是说“现在的时间是下午12点40分。”对于这个句子,语言学家会认为,讲英语的人和艾马拉人非常相似的地方在于,都将“过去”放在了前面。

英语中类似这样含糊的表达还有很多,比如“星期三的会议提前了2天举行”。这句话是说新的会议在周五举行还是周一举行呢?大约有半数参与调查的说英语者会选择前者,另外一半会选择后者。而真正的含义是什么,要取决于说话的人是否与当前的时间联系起来。这种表达方式在英语里是被普遍接受的,而且也合乎语法。

倒置的手势表达

手势分析的数据证明:艾马拉人,尤其是根本不知道语法是什么的西班牙语的长者,当提到未来的时候,他们会指向身后的空间,竖起大拇指或是摇动肩膀;当提到过去的时候,则指向身前的空间,手和胳膊向前倾——靠近身体表示“现在”或者接近“过去”或者更远一点,而最大限度的向前伸则表示古老的年代。换句话说,他们使用手势时也同样遵循“倒置”的原则。

努纳兹表示:“这些研究发现,艾马拉人对日常抽象的时间概念的认知至少有几分文化现象的味道。我们利用前后轴对时间作出解释,表达‘未来’和‘过去’时好像是把它们置于我们之前和之后。这种现象在很大程度上受到我们的移动方式、背腹性的形态学以及前视的双目观察方式等因素的影响。如果我们是一群类似没有固定形体的的生物,我们就不会创造和提出这些时间概念了。但艾马拉人相反的例子却清楚地证明了文化变异的可能性。虽然身体都是一样的,而且拥有同样的神经解剖学、神经传递素等等,但我们却有完全不同的基本的时间概念。”

年轻人开始赶“时尚”

为什么会出现这种情况呢?努纳兹和斯威特斯认为,一种可能性应该是艾马拉人的语言非常重视讲话者是否见过所表达的事件或者动作。“1492年,哥伦布航行于蓝色的大海之中”这个简单的句子是不可能用艾马拉人的语言进行表达的。根据他们的表达方式,这个句子必须指明讲话者是否亲自目睹过此事的发生,或者只是道听途说。

在一个重视“看见”与“没看见”、“知道”与“不知道”区别的文化中,重视证据的语言特点是必然的事情,将已知的“过去”置于自己之前,将未知的或不可知的“未来”置于自己后,才显得更有意义。

这只是一个初步的解释,符合观察得出的发现。研究人员在报告中写道:“经常是年长的艾马拉人拒绝当场讨论未来,在他们看来,未来很少或是没有可以感知的东西。”但这种解释并不充分,因为其它文化中也存在类似重视证据的现象,但却没有出现“未来”与“过去”倒置的问题。

从另一方面来说,倒置现象可能具有深远意义。努纳兹表示这种文化上的、认知上的语言差异可能与西班牙征服者对艾马拉人的蔑视有关。在西班牙人看来,艾马拉人是无能的,他们对“进步”或“向前”毫无兴趣。

虽然现在看来,艾马拉语本身尚未处于危险境地,毕竟当代讲这种语言的人仍有200到300万,但艾马拉人对时间的独特的思维方式至少在智利北部地区正在走向消亡。因为研究人员发现,年轻的艾马拉人都可以讲流利的西班牙语,在表达时间这个概念时,使用的方法已经与其他民族没有什么太大差异了,也就是说,艾马拉年轻人开始把“后背”代表“过去”,脸面对的方向代表“未来”。

可能是世界上最古老的语言,不仅极为古老,而更重要的是,它可能是“人造”语言—一种精心设计、刻意创造出来的语言。它特别引人注意之处在于:它的句法结构之严密,语义之明确已达到了一般的“有组织的”演讲都难以想像的程度,具有明显的人造的特征。(22)这种人造的、组织严密的句法结构意味着,艾玛拉语很容易转换成计算机规则系统,用来进行各种语言间的相互翻译:“艾玛拉语规则系统可以当做中介语言,一种语言的文件先翻译成艾玛拉语,然后再翻译成任何其他语言。”(23)一种显然是人造的、具有适用于电脑句法结构的语言,今天居然是蒂亚瓦纳科一带的印第安人在使用,这难道纯属偶然?艾玛拉语有可能是传说中说的学识渊博的维拉科查人的遗产吗?如果是,还有没有其他遗产?还有些什么古老但已湮没的智慧的产物被抛洒在这片土地上?在被征服之前的一万年里,就在这片土地上,这些智慧可能为这里丰富多彩的文化做出过巨大的贡献。也许,正是拥有了些许这种智慧,才有人画出了纳斯卡线条。也正是这种智慧,使印加人的先辈能在马丘比丘和萨克塞华曼筑起了那些“不可能”建造出来的巨石高墙。

掌握SQL四条最基本的数据 *** 作语句:Insert,Select,Update和Delete。

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据 *** 作语句—SQL的核心功能—来依次介绍比较 *** 作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据 *** 作语言(DML)语句进行处理。

SQL中有四种基本的DML *** 作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000)

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次 *** 作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000)

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000)

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000)

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000)

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000)

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL)

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis')

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL *** 作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}])

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]]

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates]

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones'

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于 <>

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY >50000


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9924698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存