2015-08-25 2 views
3

мне нужно разделить dichloropentane используя правила в SWI-Prolog это то, что я пытаюсь сделатьSplit, используя DCG правила

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]). 

на английском языке с помощью Пролога мне нужно разделить dichloropentane в di,chloro,pent,ane, как показано выше.

Я настоящий новичок в Prolog и, пожалуйста, любые профили Prolog помогают мне с кодом.

+0

Значения ''2'' и'' 3'' имеют какое-либо значение или играют роль в том, как слово разбивается? – lurker

+0

любые числа не зависят от сплита – Gamsh

ответ

2

попробовать

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 введена в ver.7 типа строку , кодирование для ВСО нужно более подробно ...

Редактировать

?- atom_codes(dichloropentane,Cs), split_list(Cs,L). 
Cs = [100, 105, 99, 104, 108, 111, 114, 111, 112|...], 
L = ["di", "chloro", "pent", "ane"] 
+3

Здесь нет необходимости в реализации конкретных решений ... – false

+0

Этот код полезен, но я хочу разбить слово типа атома. Этот код разделяется на строку типа. Любой код является разделенным атомом типа атома , А также это не работает, если слово «хлоропенан» – Gamsh

+0

почему оно должно работать? кажется неправильным. Просто адаптируйте грамматику. Для расщепления атомов см. Мою статью ... и [это] (http://www.swi-prolog.org/pldoc/doc/swi/library/dcg/basics.pl) для многих полезных материалов .. – CapelliC

Смежные вопросы