2012-12-05 221 views
4

前提字符串操作

所以我想分手給定的字符串轉換字符列表,這些字符將被編輯/改變並重新分配到列表後,列表會重建成一個字符串。

一個例子:

鑑於String : "ABCDEFG"

字符list : [A,B,C,D,E,F,G]

操作列表改變爲類似下面的: [E,F,G,H,I,J,K ](或類似的東西)。

我正在尋找一種方式來訪問字符串裏各個元素

"EFGHIJK" 

問:

然後被改造成一個字符串。如果是Java,我會使用像charAt(int i)這樣的命令,但是我不知道prolog中是否存在這樣的命令。

注意

我是一個新prolog程序員,所以我不熟悉,最prolog操作。

謝謝你的時間。

回答

3

它的炭代碼的列表的字符串,而一個原子是,那麼,原子,即不可分的,但有sub_atom/5的原子數據的存取部件。

這裏是一些字符串例子:

1 ?- L = "ABCDEF". 
L = [65, 66, 67, 68, 69, 70]. 

2 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]). 
BCDEFG 
L = [65, 66, 67, 68, 69, 70], 
N = [66, 67, 68, 69, 70, 71]. 

3 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]), atom_codes(A, N). 
BCDEFG 
L = [65, 66, 67, 68, 69, 70], 
N = [66, 67, 68, 69, 70, 71], 
A = 'BCDEFG'. 

如果分析和改造需要詳細的話,通常是更好地使用DCG中

1

你可以試試這個

t(S_in, S_out) :- 
    maplist(modif, S_in, S_temp), 
    string_to_list(S_out, S_temp). 


modif(In, Out) :- 
    atom_codes('A', [X]), 
    atom_codes('E', [Y]), 
    Out is In + Y - X. 

字符串在序言代碼列表。所以maplist對列表中的每個代碼應用一個修改(一種功能方式)。 string_to_list用於在輸出而不是代碼列表中獲取字符串。

你可以用很快的方式寫出modif,但是我可以很容易地理解它。

輸出是

?- t("ABCDEFG", Out). 
Out = "EFGHIJK".