2015-10-13 59 views

回答

0

假設X和Y是你想使用這兩個詞,而Z是輸出,我認爲我們首先需要通過驗證兩個詞開始,而不是僅僅十。今後,你的名字()■當我們只對每個單詞的第一個字母感興趣時,將每個單詞分成三個不同的變量。

記住,名稱()取入的原子和一個列表,如圖文檔中,像這樣:

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 
+0

感謝結算的概念。這很有幫助。 – ela

+0

再次感謝..你是一個天才.. – ela

+0

@ela由於許多原因(如果你覺得你需要知道,我可以進入它),最好使用更多的標準謂詞。使用'sub_atom/5'和'atom_chars/2'可以實現同樣的功能:'? - sub_atom(maggie,0,1,_,A),sub_atom(girl,0,1,_,B),atom_chars(R ,[A,B]) – 2015-10-14 05:56:20