【发布时间】:2013-03-25 10:13:13
【问题描述】:
我需要使用合金模拟碳氢化合物结构 基本上我需要设计烷烃、烯烃和炔烃基团 我创建了以下签名(烯烃示例)
sig Hydrogen{}
sig Carbon{}
sig alkenegrp{
c:one Carbon,
h:set Hydrogen,
doublebond:lone alkenegrp
}
sig alkene{
unit : set alkenegrp
}
fact{
all a:alkenegrp|a not in a.doublebond.*doublebond
all a:alkenegrp|#a.h=mul[#(a.c),2]
}
pred show_alkene{
#alkene>1
}
run show_alkene
这适用于烯烃,但是当我尝试通过改变诸如 all a:alkynegrp|#a.h=minus[mul[#(a.c),2],2] 之类的事实来为烷烃或炔烃设计相同的 它不起作用。 谁能建议我如何实现它?
我的问题陈述是 在有机化学中,饱和烃是完全由单一物质组成的有机化合物 键并被氢饱和。饱和烃的通式为 CnH2n+2(假设非循环结构)。也称为烷烃。不饱和烃 碳原子之间有一个或多个双键或三键。有双键的是 称为烯烃。具有一个双键的分子式为 CnH2n(假设非环状 结构)。含有三键的称为炔烃,通式为CnH2n-2。 模拟碳氢化合物并给出谓词以生成烷烃、烯烃和炔烃的实例。 我们尝试过:
sig Hydrogen{}
sig Carbon{}
sig alkane{
c:one Carbon,
h:set Hydrogen,
n:lone alkane
}
fact{
//(#h)=add [mul[(#c),2],2]
//all a:alkane|a not in a.*n
all a:alkane|#a.h=mul[#(a.c),2]
}
pred show_alkane(){}
run show_alkan
e
烷烃的一般公式是CnH2n+2,对于乘法我们可以使用 mul 内置函数,但我们不能写加法,因为我们必须做 C nH2n+2.我们应该写什么才能让它对烷烃起作用
【问题讨论】:
-
我不知道你所说的“它不起作用”是什么意思。在此示例中,您只有
alkenegrp的签名,而您要添加的这个新事实与alkynegrp相关,因此我很难对其进行测试。如果你给我一个我可以运行的具体模型,并告诉我为什么你认为它不起作用,那么我更有可能提供帮助。顺便说一句,#(a.c)实际上总是会评估为1,因为c是one Carbon。 -
@AleksandarMilicevic 我已经编辑了问题
标签: alloy