2015-10-13 2 views

ответ

0

Предполагая, что X и Y являются два слова, которые вы хотите использовать, и Z является выходным, я думаю, что мы в первую очередь необходимо начать с проверки оба слова, а не только X. Далее, Ваше имя() s разбивайте каждое слово на три разные переменные, когда нас интересует только первая буква каждого слова.

Помните, что имя() принимает в атоме и список, как показано в документации, так:

name(Atom,List). 

Это займет один атом и превратить его в список ASCII-кодов, а так:

?- name(abc,A). 
A = "abc" 

Оттуда мы можем извлечь голова списка, используя знакомый [A | B] формат для списков, а так:

?- name(abc,[A|B]). 
B = "bc" 
A = 97 

Как показано выше, 97 является кодом ASCII для 'a'. Это также работает в обратном порядке. Имея переменную для Atom и список ASCII кодов для списка, вы можете (по существу) конкатенации строк, а так:

?- name(A,[97,98,99]). 
A = abc 

Зная все это, и делать все, что в два раза, что приведет нас к:

?- abc = X, def = Y, name(X,[A|C]), name(Y,[B|D]), name(Z,[A,B]). 
Z = ad, 
D = "ef", 
B = 100, 
C = "bc", 
A = 97, 
Y = def, 
X = abc 

Щипцы обратно в случае, у нас есть, как так:

?- maggie = X, girl = Y, name(X,[A|C]), name(Y,[B|D]), name(Z,[A,B]). 
Z = mg, 
D = "irl", 
B = 103, 
C = "aggie", 
A = 109, 
Y = girl, 
X = maggie 
+0

Спасибо за расчистки концепцию. Это было полезно. – ela

+0

Еще раз спасибо .. Вы гений .. – ela

+0

@ela По многим причинам (я могу войти в него, если вы чувствуете, что вам нужно знать), лучше использовать более стандартные предикаты. То же самое можно сделать, используя 'sub_atom/5' и' atom_chars/2': '? - sub_atom (maggie, 0, 1, _, A), sub_atom (девушка, 0, 1, _, B), atom_chars (R , [A, B]). ' –

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