基本的に、合金を使用して炭化水素構造をモデル化する必要があります アルカン、アルケン、およびアルキン基を設計する必要があります 次のシグネチャ(アルケンの例)を作成しました
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です(非環状構造を仮定)。アルカンともいう。不飽和炭化水素には、炭素原子間に 1 つ以上の二重結合または三重結合があります。二重結合を持つものはアルケンと呼ばれます。1 つの二重結合を持つものは、式 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を実行する必要があるため、加算については書くことができません。