我需要使用合金模拟碳氢化合物结构基本上我需要设计烷烃、烯烃和炔烃基团我创建了以下签名(烯烃示例)
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
这适用于烯烃,但是当我尝试通过改变所有 a:alkynegrp|#ah=minus[mul[#(ac),2],2]的事实来为烷烃或炔烃设计相同的东西时,它不起作用。谁能建议我如何实现它?
我的问题陈述是在有机化学中饱和碳氢化合物是完全由单键组成的有机化合物,并被氢饱和。饱和烃的通式是 C n H 2n+2(假设非环状结构)。也称为烷烃。不饱和烃在碳原子之间具有一个或多个双键或三键。具有双键的称为烯烃。具有一个双键的那些具有式 C n H 2n(假设非环状结构)。含有三键的称为炔烃,通式为C n H 2n-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
烷烃的一般公式是 C n H 2n+2,对于乘法,我们可以使用 mul 内置函数,但我们不能写加法,因为我们必须做 C n H 2n+2。我们应该写什么才能使它适用于烷烃