拆分字符串后在prolog中合并字符

拆分字符串后在prolog中合并字符,prolog,Prolog,我想把列表中两个单词的第一个字母连起来 Ex - ?-inconcat(maggy,girl,A). A = mg. 假设X和Y是您希望使用的两个单词,Z是输出,我认为我们首先需要验证这两个单词,而不仅仅是X。接下来,您的name()将每个单词分成三个不同的变量,而我们只对每个单词的第一个字母感兴趣 记住name()包含一个原子和一个列表,如文档所示: name(Atom,List). 这将使用单个原子并将其转换为ASCII代码列表,如下所示: ?- name(abc,A). A = "

我想把列表中两个单词的第一个字母连起来

 Ex - ?-inconcat(maggy,girl,A).
 A = mg.

假设X和Y是您希望使用的两个单词,Z是输出,我认为我们首先需要验证这两个单词,而不仅仅是X。接下来,您的name()将每个单词分成三个不同的变量,而我们只对每个单词的第一个字母感兴趣

记住name()包含一个原子和一个列表,如文档所示:

name(Atom,List).
这将使用单个原子并将其转换为ASCII代码列表,如下所示:

?- name(abc,A).
A = "abc"
从那里,我们可以使用熟悉的列表[A | B]格式提取列表的标题,如下所示:

?- name(abc,[A|B]).
B = "bc"
A = 97
如上所示,97是“a”的ASCII码。这也反过来起作用。使用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有很多原因(如果您觉得需要了解,我可以深入讨论),最好使用更多的标准谓词。同样可以使用
sub_atom/5
atom_chars/2
?-sub_atom(玛吉,0,1,A),sub_atom(女孩,0,1,B),atom_chars(R[A,B])。