首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DCG规则拆分

使用DCG规则拆分
EN

Stack Overflow用户
提问于 2015-08-25 17:44:34
回答 1查看 130关注 0票数 3

我需要使用swi-prolog中的规则拆分二氯戊烷这是我尝试做的

代码语言:javascript
复制
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专业人士帮助我的代码。

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 18:53:48

试一试

代码语言:javascript
复制
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).

你应该得到

代码语言:javascript
复制
?- split_list(`dichloropentane`,P).
P = ["di", "chloro", "pent", "ane"] 

注意引号的类型:由于SWI-Prolog在版本7中引入了类型字符串,因此对DCG的编码需要更多的注意……

编辑

代码语言:javascript
复制
?- atom_codes(dichloropentane,Cs), split_list(Cs,L).
Cs = [100, 105, 99, 104, 108, 111, 114, 111, 112|...],
L = ["di", "chloro", "pent", "ane"]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32200658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档