我想要在列表中找到两个单词的字母。
Ex - ?-inconcat(maggy,girl,A).
A = mg.
答案 0 :(得分:0)
假设X和Y是你想要使用的两个单词,Z是输出,我想我们首先需要先验证两个单词,而不仅仅是X.接下来,你的名字()将每个单词分开当我们只对每个单词的第一个字母感兴趣时,我会分成三个不同的变量。
请记住,name()接受一个原子和一个列表,如文档中所示,如下所示:
name(Atom,List).
这将占用一个原子并将其转换为ASCII代码列表,如下所示:
?- name(abc,A).
A = "abc"
从那里,我们可以使用熟悉的[A | B]列表格式提取列表的头部,如下所示:
?- name(abc,[A|B]).
B = "bc"
A = 97
如上图所示,97是' a'的ASCII码。这也是相反的。拥有Atom的变量和List的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