我需要使用swi-prolog中的规则拆分二氯戊烷这是我尝试做的
stem--> [meth]|[eth]|[prop]|[but]|[pent].
suf --> [ane]|[ene]|[yne].
pre --> [di]|[tri]|[tetre].
hal--> [floro]|[chloro]|[bromo].
?- split_list(['2','3', dichloropentane],['2','3', di,chloro,pent,ane]).在英语中,通过使用Prolog,我需要将dichloropentane拆分成di,chloro,pent,ane,如下所示。
我是一个真正的Prolog新手,请任何Prolog专业人士帮助我的代码。
发布于 2015-08-25 18:53:48
试一试
any(S, K) --> {member(S,K)}, S.
stem(S) --> any(S, ["meth","eth","prop","but","pent"]).
suf(S) --> any(S, ["ane","ene","yne"]).
pre(S) --> any(S, ["di","tri","tetre"]).
hal(S) --> any(S, ["floro","chloro","bromo"]).
split_list(S,[A,B,C,D]) :- phrase((pre(A),hal(B),stem(C),suf(D)),S).你应该得到
?- split_list(`dichloropentane`,P).
P = ["di", "chloro", "pent", "ane"] 注意引号的类型:由于SWI-Prolog在版本7中引入了类型字符串,因此对DCG的编码需要更多的注意……
编辑
?- atom_codes(dichloropentane,Cs), split_list(Cs,L).
Cs = [100, 105, 99, 104, 108, 111, 114, 111, 112|...],
L = ["di", "chloro", "pent", "ane"]https://stackoverflow.com/questions/32200658
复制相似问题