Я хочу конкретизировать флиртные буквы из двух слов, присутствующих в списке.Конкатентные символы в прологе после сложения строки
Ex - ?-inconcat(maggy,girl,A).
A = mg.
Я хочу конкретизировать флиртные буквы из двух слов, присутствующих в списке.Конкатентные символы в прологе после сложения строки
Ex - ?-inconcat(maggy,girl,A).
A = mg.
Предполагая, что 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
Спасибо за расчистки концепцию. Это было полезно. – ela
Еще раз спасибо .. Вы гений .. – ela
@ela По многим причинам (я могу войти в него, если вы чувствуете, что вам нужно знать), лучше использовать более стандартные предикаты. То же самое можно сделать, используя 'sub_atom/5' и' atom_chars/2': '? - sub_atom (maggie, 0, 1, _, A), sub_atom (девушка, 0, 1, _, B), atom_chars (R , [A, B]). ' –