2016-01-07 3 views
1

У меня есть списокРасщепления на основе условных атомов в прологе

X = [-n,-b,-s,hello,world] 

Выход я требую

Z1 = [-n,-b,-s] 
Z2 = [hello,world] 

Если строка начинается с - она ​​должна быть частью списка Z1, еще части Z2.

Может ли кто-нибудь предоставить мне некоторую базовую интуицию, чтобы реализовать это ?.

+1

Что должно произойти с '[-n, word, -b]'? – false

ответ

1

с библиотекой (применяются) и библиотеки (YALL) это немедленно:

 
?- partition ([E]>>(E = - _), [-n,-b,-s,hello,world], N, P). 
N = [-n, -b, -s], 
P = [hello, world]. 

реализовать в старой, простой Прологе посетить список и «против» элемента в желательном списке:

divide_dashed([], [], []). 
divide_dashed([-E|R], [-E|Ds], Ps) :- !, divide_dashed(R, Ds, Ps). 
divide_dashed([E|R], Ds, [E|Ps]) :- divide_dashed(R, Ds, Ps). 
+0

Привет Капелли, если строка будет выглядеть следующим образом: '-n', это не будет распознано, есть ли способ изменить = '-n' на -n? –

+0

@SaulGarcia: нет, вы должны обрабатывать шаблон: например, попробуйте '? - A = '- n', sub_atom (A, 0,1, _, -).' – CapelliC

+0

@CapelliC мы можем использовать список map вместо divide_dashed ?. –

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