lingo的初步使用(集)


lingo里面!开始;结束之间的部分是注释。


!什么是集,为啥要有集?
我认为集的概念和面向对象里面的类比较像。一个集可以有一些成员,类似于面向对象里面的对象,集成员有相应的属性,类似面向对象里面的属性。
Lingo有两种类型的集:原始集和派生集。类似于面向对象里面的类之间的子类和父类的关系。


要想使用集,就得先对它进行声明:
setname[/member_list/][:attribute_list];
!上面这是原始集的声明方式,其中member_list(成员列表)和attribute_list(属性列表)都是可以省略的。


下面来举个例子:
sets:
students/John Jill,Rose Mike/:sex,age;
endsets;


!其中students是类名,John Jill Rose Mike是几个成员,sex,age是属性。
这里的对成员的罗列方法是显式的,啥叫显式,就是你一个个手动输进去,中间每个成员名以空格或者逗号隔开。


!显式罗列;
sets:
students/John Jill,Rose Mike/:sex,age;
endsets


!隐式罗列
sets:
setname/member1..member10/:name,sex,job;
endsets;


!数据部分,如果前面已经把变量名给写了出来,那么后面就没有必要写变量名,只要把相应的属性给赋值即可;
data:
sex,age= 1 16
0 14
0 17
1 13;
enddata


我觉得对成员的显式罗列和隐式罗列相当于是给某个类下取了某几个对象,然后在数据部分对这几个对象进行数据的初始化。


!前面的部分都是原始集,接下来我们来定义一个派生集,有种继承的感觉在里面
1.集的名字;
2.父集的名字;
3.可选,集成员
4.可选,集成员的属性
;
sets:
product/A B/;
machine/M N/;
week/1..2/;
allowed(product,machine,week):x;
endsets

稠密集:派生集成员由父类所有的组合构成,这样的派生集称为稠密集
稀疏集,如果限制派生集成员,使它成为所有集合的一个子集,这样的派生集称为稀疏集。


派生集成员列表产生方式:
1.显示罗列。
2.设置成员资格过滤器。




方式1:
allowed(product,machine,week)/A M 1,A N 2,B N 1/;!


方式2:
sets:
!学生集:性别属性sex,1表示男性,0女性
students/John,Jill,Rose,Mike/:sex,age;
!男学生和女学生联系集:友好程度属性friend,[0,1]之间的数.
linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0:friend;
!男学生和女学生的友好程度大于 0.5 的集 
linkmf2(linkmf) | friend(&1,&2) #ge# 0.5:x;
endsets 
data:
sex,age=1 16
0 14
0 17
0 13
friend=0.3 0.5 0.6;
enddata
用竖线(|)来标记一个成员资格过滤器的开始。#eq#是逻辑运算符,用来判断是否相等。&1表示第一个父集中的的所有成员,&2表示第二个父集中的所有成员。
所以linkmf是一个派生集,继承了两个都是students的原始集的派生集,其中只有第一个原始集集和第二个原始集中性别相等的成员才会是该派生集的成员。并且该
派生集还多了一个属性描述上面两个原始集之间的联系。linkmf2是linkmf的派生集,只有在linkmf中关系大于0.5的才会是linkmf2的成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值