形容词在编程语言中的表达方法.docx
- 文档编号:11545624
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:11
- 大小:1.33MB
形容词在编程语言中的表达方法.docx
《形容词在编程语言中的表达方法.docx》由会员分享,可在线阅读,更多相关《形容词在编程语言中的表达方法.docx(11页珍藏版)》请在冰豆网上搜索。
形容词在编程语言中的表达方法
、未知的属性和无意义的属性
形容词作用于名词,能使名词的一些属性状态从【未知】变为【已知】。
例如:
A.有一个球。
B.有一个(红色的)球。
第二句话中有一个形容词“红色的”,告诉你这个球是红色的,球的属性是【已知】的;第一句话只告诉你有个球,没告诉你球的颜色,此时颜色属性是【未知】的。
现在流行的编程语言Java和数据库语言SQL里,都没有专门的属性值用来表示【未知】。
在数据库里,如果表格的某个单元格没有填上值,只要你设置了“允许空值”并且你没有设定默认值,那么它就会被初始化为null空值。
表格中的空值,有时候表示这个属性值是不存在、无意义的,有时候却表示这个属性值是未知的、不确定的。
1.未知属性
例如,钟恒的性别属性为空值,表示ta的性别还不确定,可能是ta填调查表的时候忘记了写性别。
一般情况下人的性别只有男/女两种,一个人不可能不具有性别。
2.无意义属性
又例如,我建立了一张数据库表格,里面有四列,分别表示课程名称,以及这堂课在第几节课开始、在第几节课结束、在星期几上。
对于网络课程,后面三个属性都是无意义的、不存在的。
因为网络课程没有规定你必须在星期几什么时间段听课,你只要有一台电脑、能连得上网,就可以听课。
3.现实世界中的对象存在大量的未知属性
在人编程序中,程序员定义一个新的对象,通常是调用类的构造函数,一次性把全部属性都填上去,没填的就自动填上默认值,或者置空。
现实生活中,我们学习或者了解到一个新事物,一般不会一次性知道它的全部属性。
人的认知过程是循序渐进的,如果对一个事物的某一方面暂时还不了解,那就在头脑里面把它的属性值设置为【未知】,待以后填补这个空白。
比如我听说星期三要上PHP程序设计课,但不知道在哪一节课上,那么“在第几节课开始”和“在第几节课结束”这两个属性值就暂时设值为【未知】,以后补上。
4.用谓词逻辑法,区分未知属性和无意义属性
JavaScript脚本语言里,用undefined表示一个未定义的变量,用null来表示空的变量。
C++、Java语言里面没有“未知”的概念,我们只能建立一张表,来表明那些属性是未知的,那些属性是空的(null)。
下图所示为Nullitem空项表
由于数据库中,为空的项大多数是未知项,所以我规定,计算机查询一个对象的属性,如果返回的结果是null,这时候有两种可能——这属性要么是无意义的、不存在的(真正的null),要么是未知的。
这时候再让计算机去查一下空项表(Nullitem),如果表格中确实存在这一项,则表明这个属性的值为空,否则就表明这个属性的值是未知的。
二、形容词的两大作用
1.缩小查找范围
对句子中的名词对象进行修饰,缩小查找范围。
相当于数据库select语句where子句后面添加的条件。
例如:
查找(实验班的)高三学生
这句话中,“实验班的”是句子的定语成分,表示“1班或2班的学生”(假定实验班就是1、2班),这句话相当于数据库语句:
Select*fromStudentwhere(班级=1or班级=2)and年级=3;
2.给对象的属性赋值
形容词作用于一个名词,自然语言中的表达方式为:
<名词>是<形容词>,
这相当于对名词的某一属性进行赋值。
例如钟恒是一个学生,但由于我对这个人不熟悉,只是听说ta的名字,其他一概不知。
现在别人告诉我“钟恒是男的”,这个句子中名词是“钟恒”,形容词是“男的”。
这样一来,钟恒的性别从【未知】变成了【男】,在编程语言里这就相当于将钟恒对象的性别属性赋值为男(布尔值true)。
三、【形容词→表达式】的一对多映射
同样一个形容词,作用于(修饰)不同类型的名词,得翻译成不同的表达式,才能让计算机做出正确的判断。
比如形容词“北京的”,可以修饰一辆车,也可以修饰一个人,或者一串电话号码。
北京的车,即车牌号以“京”字开头的车。
北京的人,即身份证号码以110开头的人。
北京的电话号码,即开头区号为010的电话号码。
程序运行截图
四、形容词查询的两种方式
1.根据谓词本身含义查询,直接对对象的属性值进行运算
比如形容词“北京的”,北京人的身份证号码是110开头的,可以根据身份证号码来判定这个人的籍贯是不是北京。
数据库伪代码为:
Select*fromPersonwhere身份证号码以110开头
这需要精确读取身份证号字符串,如果不知道身份证号码就无法判断。
2.谓词逻辑方法,在事实库中查询
前面那种方法显然不符合人类的思维习惯,几乎没有人会去记身边的人的身份证号码。
我了解到X是北京的,我只要在头脑中做个标记,记住这个命题就可以了,我不需要去记X的身份证号码到底是多少。
计算机查询方法:
枚举表格中所有的人员,分别构建命题:
<形容词名>(<人名>)
然后到事实库表格中查找,看有没有这样一条真命题。
如果有,则返回真;否则就返回假。
五、形容词在推理过程中的作用相当于谓词
这是一张If-Then命题表,如果左边的(LHS=LeftHandSide左手边)命题成立,则右边的命题成立,或者执行右边的命令语句。
比如第一条,如果某个人的技能属性(abilities,是个数组)里包含“JavaWeb开发”这项技能,则给他的增加一项技能“Java语言”。
这就是说,如果某个人会JavaWeb开发,则他一定会Java语言。
比如第三条,如果某个人会安卓开发,则他一定会Java。
如果检测到某个人X会安卓开发,则向事实库写入命题“会Java的(X)”。
这是Person表格的初始状态。
在查询界面下输入信息——查找会Java编程的人,
系统返回的数据只有一条,
根据前面的表格我们知道:
陆小千会JavaWeb开发,他肯定也会Java语言;
程华会安卓开发,他肯定也会Java语言。
这个时候我们就得刷新事实库,让计算机做演绎推理。
将①如果一个人会JavaWeb开发,则他一定会Java语言
和②陆小千会JavaWeb开发
这两条命题联立起来,得到新结论:
③陆小千会Java语言。
刷新之后,再次查看整张表格
可以看见系统给陆小千增添了一项技能“Java语言”。
与此同时,事实库中新增了一条命题“会Java开发的(程华)”,如下图所示。
再次查询得到3条记录
六、对象属性的两种表示方法
1.“对象.属性=值”方法
直接将具体值存储到对象的属性成员中,或者直接对对象的属性成员进行写操作。
这种方法的优点是:
可以直接根据对象名查询属性的值;缺点是不便于推理
2.谓词逻辑方法
把对象的属性状态作为一个命题写到事实库中。
3.附:
函数、谓词、命令、命题的区分
谓词只会告诉你一个状态是true还是false,它不会直接地修改对象的属性值,它只能对事实库进行增删改查。
函数则可能会直接修改对象。
谓词+参数构成命题
函数+参数构成命令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 形容词 编程 语言 中的 表达 方法