前提
因此,我试图将一个给定的字符串分解为一个字符列表,然后这些字符将被编辑/更改并重新分配到列表中,然后列表将被重新构造为一个字符串。
举个例子:
给定String : "ABCDEFG"
字符list : [A,B,C,D,E,F,G]
操作将列表更改为如下所示:E,F,G,H,I,J,K。
然后被重构成一个字符串:
"EFGHIJK"
问题
我正在寻找一种方法来访问字符串中的单个元素。如果是Java,我将使用类似于charAt(int i)
的命令,但我不知道这种命令是否存在于prolog中。
Note
我是一个新的prolog
程序员,所以我不熟悉大多数prolog
操作。
耽误您时间,实在对不起。
发布于 2012-12-05 12:48:05
字符串--它是一个字符代码列表,而一个原子--它是原子的,也就是不可分割的,但是有原子/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'.
如果分析和转换需要详细信息,那么通常最好使用DCGs
发布于 2012-12-05 09:35:33
字符串是Prolog中的原子。
在您的例子中,您可以这样做:"EFGHIJK“= List。
这里有一个很好的帖子:http://obvcode.blogspot.com/2008/11/working-with-strings-in-prolog.html
发布于 2012-12-05 09:41:47
你可以试试这个
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.
字符串是Prolog中的代码列表。因此,maplist对列表中的每个代码进行了修改(一种功能方式)。string_to_list可以在输出端获得一个字符串,而不是一个代码列表。
您可以快速地编写修饰语,但我用您可以轻松理解的方式编写它。
输出是
?- t("ABCDEFG", Out).
Out = "EFGHIJK".
https://stackoverflow.com/questions/13728938
复制